如何在UITextFieldDelegate的方法中提前獲取text變化后的值

如果要實時檢測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
? ? }
}

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容