问题
在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?

最佳答案

如果使用NSStrings方法,则可以执行此操作。更改方法的第一行以声明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实例与字符串不兼容。)

10-08 19:42