从其他类访问UI元素

时间:2016-07-11 17:56:51

标签: ios cocoa-touch

  1. int indexStart = csv.IndexOf(','); int indexEnd = indexStart < 0 ? 0 : csv.IndexOf(',', indexStart + 1); string result = null; if(indexEnd > 0) result = csv.Substring(indexStart + 1, indexEnd - indexStart - 1); 包含诸如的元素 ViewController和两个UIPickerView s。
  2. UITextField,其中PickerViewControllerUIPickerViewDelegate方法已实施(UIPickerViewDataSourcedidSelectRow和其他方法。
  3. titleForRow中选择元素后,我需要更改其中一个UIPickerView的文本。我不能这样做,因为UITextField已在didSelectRow:中实施,PickerViewController包含在UITextField中。我怎样才能访问?最重要的是,我该如何正确地做到这一点?

    我应该在另一个类中实现picker方法,还是将它们放在ViewController

3 个答案:

答案 0 :(得分:1)

  

我该怎样才能正确地做到这一点?

这是一个更好的问题,而不仅仅是如何让PickerViewController更改其父视图控制器中的文本字段,因为实际上它不应该。

两种可能性让人想起:选择器控制器可以将某种消息直接传递回另一个控制器,或者它可以更新模型,另一个控制器在选择器视图完成后读取该模型。

第一个可能是最容易实现的,通过给选择控制器&#34;选择&#34; handler将具有必要数据作为参数的块,以及父控制器在另一个上定义和设置的块。在拾取器控制器被解除之前,它应该调用块,传入选择并执行其他控制器指定的任何操作。

第二个意味着父控制器和选择器控制器必须能够访问同一个数据对象。在不知道还有什么事情发生的情况下,很难确切,但一个很好的可能性是父控制器实际上给选择控制器提供了它应该从中读取的模型对象,而不是选择器控制器自己获取它。选择器控制器只是更改它传递的对象。

答案 1 :(得分:0)

您可以将UITextField属性添加到PickerViewController并从UIViewController传递UITexiField实例:

PickerViewController.h中的

@property UITextField *textField1, *textField2;
UIViewController.m中的

PickerViewController *picker = [PickerViewController new];
picker.textField1 = self.textField1;
picker.textField2 = self.textField2;

无论如何,您可以在另一个类或ViewController中实现PickerView。

答案 2 :(得分:0)

您可以使用自定义委托来更新文本字段值。