以使用UITextFieldDelegate為例
func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
、泉坐、疏日、
return true
}
在字符串發(fā)生改變的時候我需要提前知道改變后的內容
所以需要使用
replacingCharacters(in: <#RangeExpression#>, with: <#StringProtocol#>)
第二個參數(shù)需要遵守StringProtocol協(xié)議账劲,String類型就可以
第一個參數(shù)需要遵守RangeExpression協(xié)議奕短,NSRange不符合婉刀,需要使用Range帜平。對String進行擴展
extension String {
func toRange(_ range: NSRange) -> Range<String.Index>? {
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
}
}
在代理中使用:
var toBeStr = textField.text
let rag = toBeStr?.toRange(range)
toBeStr = toBeStr?.replacingCharacters(in: rag!, with: string)