从父类获取属性

时间:2013-04-04 13:54:23

标签: ios objective-c

我添加了一个像这样的孩子的视图控制器:

UIViewController *sendViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"send"];
[self addChildViewController:sendViewController];

在sendViewController中我得到了这个属性:

@property (strong, nonatomic) IBOutlet StringInputTableViewCell *nameCell;

在该课程中,我可以执行类似self.nameCell.textField.text = @"test";的操作,将textField设置为test

但是如何才能在父类的textField中填写这个文本?

3 个答案:

答案 0 :(得分:1)

您正在混合模型和视图,因此打破了MVC设计模式

您不应该尝试阅读UI元素的内容。相反,您应该拥有由控制器管理的所有数据(即模型)和视图(即UI,例如文本字段)。

有(简单)方法可以获取此信息,但我强烈建议您走这条路!

答案 1 :(得分:0)

父类和子类之间的基本继承应该允许您向前传递属性。

您需要创建该类的子对象,例如 obj 。然后获取您将使用的字段的文本值(在父类中)

id obj = [[ChildClassName alloc] init];
NSString *myChildsText = obj.nameCell.textField.text;  // will get the value @"test" as assigned in the childclass. 

当然,您可以在@property的子类中创建一个getter和setter。例如::

- (IBOutlet)nameCell {
 // returns the value
}

- (IBOutlet)setNameCell :(StringInputTableViewCell)newValue {
 //set the value to the @synth value here… 
}

然后你可以调用子对象getter / setters,如下所示::

NSString * text = [obj nameCell]; //等等

答案 2 :(得分:0)

您可以在此处使用4种方法

a)继续引用你的childviewcontroller - >直接获得价值 b)使用委托方法(最适合观察文本字段中的更改) c)发送NSNotification - >这带来了开销,在某些方面它可以帮助你很多 d)KVO