ViewController
包含如下元素UIPickerView
和两个UITextField
。- 有
PickerViewController
,其中实现了UIPickerViewDelegate
和UIPickerViewDataSource
方法(didSelectRow
,titleForRow
,以及其他的)。
在 UIPickerView
中选择一个元素后,我需要更改其中一个 UITextField
的文本。我不能这样做,因为 didSelectRow:
是在 PickerViewController
中实现的,但是 UITextField
包含在 ViewController
中。我怎样才能获得访问权限?最重要的是,我怎样才能正确地做到这一点?
我应该在另一个类中实现选择器方法,还是将它们放在 ViewController
中?
最佳答案
how can I do that correctly?
这是一个比简单地让 PickerViewController
更改其父 View Controller 中的文本字段更好的问题,因为它确实不应该。
我想到了两种可能性:选择器 Controller 可以将某种消息直接传递回另一个 Controller ,或者它可以更新一个模型,另一个 Controller 在选择器 View 完成后从中读取。
第一个可能最容易实现的方法是为选择器 Controller 提供一个“选择后”处理程序 block ,该处理程序 block 将具有必要的数据作为参数,并且父 Controller 在另一个上定义和设置。在选择器 Controller 被关闭之前,它应该调用 block ,传递选择并执行其他 Controller 指定的任何操作。
第二个意味着父 Controller 和选择器 Controller 必须访问同一个数据对象。在不知道发生了什么的情况下,很难准确,但一个很好的可能性是父 Controller 实际上给选择器 Controller 它应该从中读取的模型对象,而不是选择器 Controller 获取它自己。选择器 Controller 只是更改它传递的对象。
关于ios - 从其他类访问 UI 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38313256/