问题
在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?
最佳答案
如果使用NSString
s方法,则可以执行此操作。更改方法的第一行以声明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
和内置的SwiftRange
实例与字符串不兼容。)