Swift - 文本输入框内容改变时响应,并获取最新内容
2016-02-27 14:11
483 查看
1,问题描述
有时我们开发的时候需要先把“确认”按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用。
2,实现原理
(1)要检测文本框内容的变化,我们需要让新界面的Controller遵循一个文本协议 UITextFieldDelegate。
同时在 viewDidLoad 方法内将文本框的代理设置为当前实例。
然后实现 textFile 的 shouldChangeCharactersInRange 方法就能在文本框将要变化的时候执行一些代码。
(2)但这个只是将要变化时执行,而不是变化后。比如在这个方法内打印出文本框的内容,会发现每当我们改变文本框的内容时,打印出来的是上一次的内容。
比如先输入1,打印出来是空。再输入2,文本框上是12,但打印出来却是1.
要获取最新内容,则需要String的 stringByReplacingCharactersInRange 方法,但这个方法在Swift的String中又不支持。要解决这个问题,就要先替 NSRange 做个扩展。
3,代码如下
下面介绍2种swift的字符串截取方法,实际上用到了
1.将
2.直接调用
通过
有时我们开发的时候需要先把“确认”按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用。
2,实现原理
(1)要检测文本框内容的变化,我们需要让新界面的Controller遵循一个文本协议 UITextFieldDelegate。
同时在 viewDidLoad 方法内将文本框的代理设置为当前实例。
然后实现 textFile 的 shouldChangeCharactersInRange 方法就能在文本框将要变化的时候执行一些代码。
(2)但这个只是将要变化时执行,而不是变化后。比如在这个方法内打印出文本框的内容,会发现每当我们改变文本框的内容时,打印出来的是上一次的内容。
比如先输入1,打印出来是空。再输入2,文本框上是12,但打印出来却是1.
要获取最新内容,则需要String的 stringByReplacingCharactersInRange 方法,但这个方法在Swift的String中又不支持。要解决这个问题,就要先替 NSRange 做个扩展。
3,代码如下
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)//67890 println(ns2)//1234 println(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)//67890 print(s2)//1234 print(s3)//5 // 扩展String extension 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> }
相关文章推荐
- iOS9-by-Tutorials-学习笔记一:Swift-2-0
- OC项目中使用Swift
- Swift kCGImageAlphaPremultipliedLast unresolved
- 6.Swift协议|扩展|访问权限|异常调试|类型转换|运算函数|ARC|类类型初试化器|值类型初始化器
- Swift学习03
- 100.Same Tree(Swift待解)
- swift基本语法(总结提炼版)之011 swift 之函数类型
- iOS 开发 -- Swift (十三) 只读属性
- IOS Apps 开发(Swift)(8)——Create a Table View
- iOS 开发 -- Swift (十二) 懒加载
- swift语法(三)
- iOS 开发 -- Swift (十一) 便利构造函数
- Swift中的?与!区别分析
- iOS 开发 -- Swift (十) 重载构造函数
- Swift:界面传值指南
- 在OC项目中添加Swift文件并实现混合编程
- swift与OC的关系
- iOS 开发 -- Swift (九) 构造函数
- IOS Apps 开发(Swift)(7)——Define Your Data Model
- IOS Apps 开发(Swift)(6)——Implement a Custom Control(2)