使用选择器视图更改文本时未调用onTextChange目标 - iOS Swift

时间:2017-06-21 14:22:17

标签: ios swift uitextfield uipickerview

我有两个文本字段。

一个是人类型:"丈夫,"妻子","单身","儿童"。 另一个是出生顺序。

我希望仅在人员类型文本字段的文本为" Child"。

时启用出生顺序文本字段。

人物类型文本字段的输入视图是具有4个选项的选择器视图。我已尝试将目标添加到我的人员类型文字字段中,如下所示:

personTypeTextField.addTarget(self, action: #selector(onTextChange), for: UIControlEvents.editingChanged)

然后onTextChange函数执行此操作:

func onTextChange() {
    if personTypeTextField.text == "Child" {
        birthOrderTextField.isEnabled = true
    } else {
        birthOrderTextField.isEnabled = false
        birthOrderTextField.text = ""
    }
}

但是当我使用选择器视图进行人员类型选择时,不会调用onTextChange函数。为什么不打电话?

2 个答案:

答案 0 :(得分:2)

您可以使用UIPickerView delgate方法而不是textField选择器

响应行选择

  

func pickerView(UIPickerView,didSelectRow:Int,inComponent:Int)

当用户选择组件中的行时,由选取器视图调用。

self.personTypeTextField.text = YOUR_ARRAY[row]

最后检查

if personTypeTextField.text == "Child" {
        birthOrderTextField.isEnabled = true
    } else {
        birthOrderTextField.isEnabled = false
        birthOrderTextField.text = ""
    }

不要忘记将委托分配给pickerView。

答案 1 :(得分:1)

如果我理解正确,你不要直接在输入视图中输入,而是从选择器视图中选择一个选项。我猜你是以编程方式为personTypeTextField.text分配一个新值。在这种情况下,UIControlEvents.editingChanged目标未被调用是正常的,因为输入视图从未被用户编辑过。您应该在选择器完成选择值时运行您的功能。