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