Swift - 文本输入框内容改变时响应,并获取最新内容
生活随笔
收集整理的這篇文章主要介紹了
Swift - 文本输入框内容改变时响应,并获取最新内容
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1,問題描述 有時我們開發的時候需要先把“確認”按鈕初始設置為不可用,當文本框中輸入文字以后,再將輸入按鈕變為可用。
2,實現原理 (1)要檢測文本框內容的變化,我們需要讓新界面的Controller遵循一個文本協議UITextFieldDelegate。 同時在viewDidLoad方法內將文本框的代理設置為MainListController當前實例。 然后實現textFile的shouldChangeCharactersInRange方法就能在文本框將要變化的時候執行一些代碼。 (2)但這個只是將要變化時執行,而不是變化后。比如在這個方法內打印出文本框的內容,會發現每當我們改變文本框的內容時,打印出來的是上一次的內容。 比如先輸入1,打印出來是空。再輸入2,文本框上是12,但打印出來卻是1. 要獲取最新內容,則需要String的stringByReplacingCharactersInRange方法,但這個方法在Swift的String中又不支持。要解決這個問題,就要先替NSRange做個擴展。
3,代碼如下
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 ????} } |
總結
以上是生活随笔為你收集整理的Swift - 文本输入框内容改变时响应,并获取最新内容的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 前端面试1:CSS布局
- 下一篇: Python(pycharm)在wind