问题
在UITextFieldDelegate的textField:shouldChangeCharactersInRange:replacementString
中,我们会获得tf.text
中的原始文本,替换字符串和范围。
这是计算目标字符串的足够信息(如果我们没有拦截,TextField会包含什么),但是我无法编译这段代码:
func textField(
tf: UITextField,
shouldChangeCharactersInRange range: NSRange,
replacementString str: String
) -> Bool
{
var tgt = String( tf.text )
tgt.replaceRange( range.toRange(), with: str ) // PROBLEM HERE
NSLog( "realtime: %@", tgt )
return true
}
我似乎遇到的问题是,String的replaceRange:with:
接受一个字符,而不是字符串。
也许有更好或更简单的方法来计算tgt?
答案 0 :(得分:1)
如果使用NSString
方法,则可以执行此操作。更改方法的第一行以声明NSMutableString
而不是String
:
func textField(tf: UITextField, shouldChangeCharactersInRange range: NSRange,
replacementString str: String) -> Bool {
var tgt = NSMutableString()
tgt.appendString( tf.text )
tgt.replaceCharactersInRange( range, withString: str )
NSLog( "realtime: %@", tgt )
return true
}
(问题源于NSRange
和内置的Swift Range
实例与字符串不兼容。)