如何在UITextFieldDelegate方法中计算目标字符串?

时间:2014-10-03 19:03:42

标签: string swift range

问题

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

1 个答案:

答案 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实例与字符串不兼容。)