使用 shouldChangeCharactersInRange 函数时如何使特定文本字段不可编辑

how can I make a particular textfield uneditable when using shouldChangeCharactersInRange function

我正在处理包含 4 个文本字段的注册页面。其中一个 text fields 用作选择器视图,当用户 tap 使用它时,会弹出一个 picker-view 选项供您选择。

问题是我如何制作那个特定的 textfield uneditable? (不是所有的文本字段)。

我试过使用

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

return false
}

但问题是它使我所有的文本字段都无法编辑。

我也不能使用 textField.userInteractionEnabled = false,因为那样我就无法点击文本字段来显示 picker-view

谢谢。

将对您不想编辑的文本字段的引用与您在该方法的参数中获得的引用进行比较。

if self.uneditableTextField == textField {
     //do not edit
}

您也可以使用 guard 来达到这种目的

您可以保留对文本字段的引用并在您的委托方法中与它进行比较:

func textField(textField: UITextField!, shouldChangeCharactersInRange range: NSRange, replacementString string: String!) -> Bool {
    if textField == self.myTextField {
         return false 
    }
    return true
}

我采用的另一种选择是将 UIView 放置在带有手势识别器的文本字段之上,以拦截触摸并调用选择器或执行您希望在触摸该字段时执行的任何代码。