限制某些UITextField中的某些字符

时间:2018-05-21 19:12:02

标签: ios swift

我有一个带有多UITextFields的视图控制器,几乎每个文本字段都必须用某些字符限制。我正在使用此代码:

find_or_initialize_by

它运行良好,但它适用于所有UITextFields,如何才能使它仅适用于某个文本字段?

3 个答案:

答案 0 :(得分:2)

您可以将textField与您要限制输入的内容进行比较

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if textField == self.firsNameTxf {

        return string.rangeOfCharacter(from: CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) == nil }

    else {

         return true 
   }

}

答案 1 :(得分:1)

这是一种委托方法,每次按下键盘上的字符时都会调用该方法,如果它在所有文本视图中全局工作,则表示您拥有一个代表所有文本视图的类。
为了避免这种情况,您可以轻松地检查正在调用它的代理内部,并将此行为仅用于一个。

  func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {
    guard textField === noChartextField else {
    return true
}
    return string.rangeOfCharacter(from: CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) == nil
}

请注意,在这里您可以使用标识运算符===,因为您只是检查textFieldnoChartextField是否指向相同的内存地址。我想==可以正常工作,因为UItextField继承自NSObject,其中方法-isEqual如果没有被覆盖则会检查指针相等性。

答案 2 :(得分:0)

请在委托方法中添加texfield条件,如:

 func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool {

    if textField == firestTextField || textField == secondTextField {

        return string.rangeOfCharacter(from: CharacterSet(charactersIn: "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")) == nil

        } 
      return true
 }