【问题标题】:How can I update text on alert controller's UITextField from the pickerView didSelectRow delegate method?如何从 pickerView didSelectRow 委托方法更新警报控制器的 UITextField 上的文本?
【发布时间】:2017-04-19 15:00:19
【问题描述】:

我想在 UIPickerView 滚动时更新 UIAlertController 中的 UITextField。

我尝试在我的文本字段上添加标签:

myTextField.addTextField(configurationHandler: { (textField) -> Void in
        textField.inputView = self.myPickerView
        textField.tag = 2
        textField.delegate = self
})

对于 pickerView 委托方法 didSelectRow 我声明了一个 ivar pickerViewName 来存储行的名称:

func pickerView(_ pickerView: UIPickerView, didSelectRow row: Int, inComponent component: Int) {

    pickerViewName = myArray[row].name
    //Update UITextField text here, but unable to get it's tag.
}

textFieldDidBeginEditing 委托方法上:

func textFieldDidBeginEditing(_ textField: UITextField) {

    if (textField.tag == 2)
    {
        textField.text = pickerViewName!
    }

}

但它不起作用。当我上下滚动时,文本字段不会更新。非常感谢您能帮我指出我的错误在哪里!谢谢。

【问题讨论】:

    标签: ios swift uitextfield uipickerview uialertcontroller


    【解决方案1】:

    在您的代码中,您正在执行以下操作:如果选择器滚动,则为变量分配一个新名称。但是,您永远不会为文本字段调用更新。在您开始编辑文本字段后分配您的姓名。我不确定这是否需要,否则您将不得不手动调用它。

    【讨论】:

    • 我为我的文本字段添加了代理。问题是我无法获取文本字段并在 didSelectRow 方法中更改它的文本。我试过self.view.viewWithTag,但它也不起作用。
    • 当然不行。 UIAlertController 有自己的视图。如果你想得到它,你需要做myTextField.view.viewWithTag
    • 非常感谢,成功了。但是,我必须将 UIAlertController 放在我的方法之外才能访问它。
    • 但在您的情况下,我宁愿获得对文本字段的引用,也不愿获得警报视图本身。如果您觉得有帮助,请将其标记为正确答案。
    猜你喜欢
    • 1970-01-01
    • 2021-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多