如果要實時檢測UITextField值在界面輸入的變化,可以設置UITextField.delegate
并實現(xiàn)UITextFieldDelegate的以下方法
func textField(_ textField:UITextField, shouldChangeCharactersIn range:NSRange, replacementString string:String) ->Bool{
? ? }
但在該方法中直接獲取textField.text無法得到更新后的值,如果需要獲取,可利用shouldChangeCharactersIn與replacementString,結合textField.text(舊的值)計算得出。
直接上代碼:
func textField(_ textField:UITextField, shouldChangeCharactersIn range:NSRange, replacementString string:String) ->Bool{
????????var text = textField.text!
? ? ? ? let range1 = text.toRange(range)//需要擴展String類,見以下代碼
? ? ? ? //text就是新值
? ? ? ? text = text.replacingCharacters(in: range1!, with: string)
? ? ? ? return true
? ? }
//還需要為String添加擴展,實現(xiàn)NSRange向Range的轉換
public extension String {?
?public func toRange(_ range: NSRange) -> Range? {
? ? ? ? guard let from16 = utf16.index(utf16.startIndex, offsetBy: range.location, limitedBy: utf16.endIndex) else { return nil }
? ? ? ? guard let to16 = utf16.index(from16, offsetBy: range.length, limitedBy: utf16.endIndex) else { return nil }
? ? ? ? guard let from = String.Index(from16, within: self) else { return nil }
? ? ? ? guard let to = String.Index(to16, within: self) else { return nil }
? ? ? ? return from ..< to
? ? }
}