Swift - 文本输入框内容改变时响应,并获取最新内容

1,问题描述
有时我们开发的时候需要先把“确认”按钮初始设置为不可用,当文本框中输入文字以后,再将输入按钮变为可用。

2,实现原理
(1)要检测文本框内容的变化,我们需要让新界面的Controller遵循一个文本协议UITextFieldDelegate。
同时在viewDidLoad方法内将文本框的代理设置为MainListController当前实例。
然后实现textFile的shouldChangeCharactersInRange方法就能在文本框将要变化的时候执行一些代码。
 
(2)但这个只是将要变化时执行,而不是变化后。比如在这个方法内打印出文本框的内容,会发现每当我们改变文本框的内容时,打印出来的是上一次的内容。
比如先输入1,打印出来是空。再输入2,文本框上是12,但打印出来却是1.
要获取最新内容,则需要String的stringByReplacingCharactersInRange方法,但这个方法在Swift的String中又不支持。要解决这个问题,就要先替NSRange做个扩展。

3,代码如下
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
import UIKit
 
class ViewController : UIViewController , UITextFieldDelegate {
 
     @IBOutlet weak var button: UIButton !
     @IBOutlet weak var textField: UITextField !
     
     override func viewDidLoad() {
         super .viewDidLoad()
         // Do any additional setup after loading the view, typically from a nib.
         
         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 = countElements(newText) > 0
         return true
     }
     
     override func didReceiveMemoryWarning() {
         super .didReceiveMemoryWarning()
         // Dispose of any resources that can be recreated.
     }
}
 
//扩展NSRange,让swift的string能使用stringByReplacingCharactersInRange
extension NSRange {
     func toRange(string: String ) -> Range < String . Index > {
         let startIndex = advance (string.startIndex, self .location)
         let endIndex = advance (startIndex, self .length)
         return startIndex..<endIndex
     }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值