Swift - 文本输入框内容改变时响应,并获取最新内容
来源:互联网 发布:windows邮件客户端 编辑:程序博客网 时间:2024/06/02 06:07
1,问题描述
有时我们开发的时候需要先把“确认”按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用。
2,实现原理
(1)要检测文本框内容的变化,我们需要让新界面的Controller遵循一个文本协议 UITextFieldDelegate。
同时在 viewDidLoad 方法内将文本框的代理设置为当前实例。
然后实现 textFile 的 shouldChangeCharactersInRange 方法就能在文本框将要变化的时候执行一些代码。
(2)但这个只是将要变化时执行,而不是变化后。比如在这个方法内打印出文本框的内容,会发现每当我们改变文本框的内容时,打印出来的是上一次的内容。
比如先输入1,打印出来是空。再输入2,文本框上是12,但打印出来却是1.
要获取最新内容,则需要String的 stringByReplacingCharactersInRange 方法,但这个方法在Swift的String中又不支持。要解决这个问题,就要先替 NSRange 做个扩展。
3,代码如下
import UIKit
class ViewController: UIViewController ,UITextFieldDelegate{
@IBOutlet weak var button: UIButton!
@IBOutlet weak var textField: UITextField!
override func viewDidLoad() {
super.viewDidLoad()
textField.delegate = self
}
func textField(textField: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString string: String) -> Bool {
let newText = textField.text!.stringByReplacingCharactersInRange(
range.toRange(textField.text!), withString: string)
button.enabled = newText.characters.count > 0
return true
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}
//扩展NSRange,让swift的string能使用stringByReplacingCharactersInRange
extension NSRange {
func toRange(string: String) -> Range<String.Index> {
let startIndex = string.startIndex.advancedBy(self.location)
let endIndex = startIndex.advancedBy(self.length)
return startIndex..<endIndex
}
}
swift中字符串截取方法(substring)
下面介绍2种swift的字符串截取方法,实际上用到了
substringFromIndex
,substringToIndex
,substringWithRange
1.将String
转化为NSString
再截取,代码如下:
var s="1234567890"var ns1=(s as NSString).substringFromIndex(5)var ns2=(s as NSString).substringToIndex(4)var ns3=(s as NSString).substringWithRange(NSMakeRange(4, 1))println(ns1)//67890println(ns2)//1234println(ns3)//5
2.直接调用String
的对应方法(推荐使用该方法),由于String
对应的方法参数是String.Index
类型而非Int
类型,所以我们首先要创建String.Index
类型参数值,代码如下:
// var s="1234567890"// let index = advance(s.startIndex, 5) swift 1.x//let index2 = advance(s.endIndex, -6); swift 1.x var s="1234567890"let index = s.startIndex.advancedBy(5) //swift 2.0+let index2 = s.endIndex.advancedBy(-6) //swift 2.0+var range = Range<String.Index>(start: index2,end: index)var s1:String=s.substringFromIndex(index)var s2:String=s.substringToIndex(index2)var s3=s.substringWithRange(range)print(s1)//67890print(s2)//1234print(s3)//5 // 扩展Stringextension String { subscript (r: Range<Int>) -> String { get { let startIndex = self.startIndex.advancedBy(r.startIndex) let endIndex = self.startIndex.advancedBy(r.endIndex) return self[Range(start: startIndex, end: endIndex)] } }}var s4 = s[2...4]print(s4);//345
通过String
定义可以看出属性Index
是个结构体,具体代码如下:
extension String : CollectionType { struct Index : BidirectionalIndexType, Comparable, Reflectable { func successor() -> String.Index func predecessor() -> String.Index func getMirror() -> MirrorType } var startIndex: String.Index { get } var endIndex: String.Index { get } subscript (i: String.Index) -> Character { get } func generate() -> IndexingGenerator<String>}
1 0
- Swift - 文本输入框内容改变时响应,并获取最新内容
- Python入门:请重新输入并获取最新的一次输入的内容
- js改变文本内容
- abap调用编辑框实现输入长文本、大块文本,并获得编辑框中的内容
- JavaScript 点击单选按钮改变输入框(文本域)的内容
- 监听文本输入框内容值的改变——4种方法
- iOS7实现带文本输入框的UIAlertView及获取TextField文本内容
- 输入内容到指定文本中,并打开文件
- iOS 判断输入框内容是否为数字,并判断输入首位内容是否为0,时时获取输入的新内容
- mfc中,COMBOBOX如何获取输入的文本内容
- java如何获取本地输入框焦点并向其输入内容
- 当UITextField内容改变时获取值
- UITextField 获取输入内容
- 关于文本输入框获取光标位置以及指定位置插入内容
- 输入框输入时实实检测输入内容并添加到输入框前面
- JQuery输入框中输入内容改变事件
- EditText 文本内容输入限制
- javascript 选中文本输入框的部分文本内容
- 对话框样式的Activity 和 重复点击view
- sqoop使用
- java设计模式--单例模式
- Android即时通讯--仿QQ即时聊天:(四)好友列表的处理
- UVA 12657(p144)----Boxes in a Line
- Swift - 文本输入框内容改变时响应,并获取最新内容
- AngularJS 最常用的八种功能
- C语言——内存管理
- dede arclist ajax分页
- ActionBar的Overlay模式如何不遮盖顶部内容的问题
- 经典递归问题集锦
- 优质软件及资源整理-Kylin推荐
- 1069. The Black Hole of Numbers (20)
- 数据结构算法之排序系列Java、C源码实现(6)--快速排序