2013-04-04 109 views
0

我添加了一个视图控制器孩子是这样的:获得从父类中的属性

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

在sendViewController我得到这个属性:

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

,并在该类我可以做像self.nameCell.textField.text = @"test";设置要测试的文本字段

但是,我怎样才能得到这个文本填充在父类中的textField?

回答

1

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

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

有(简单的)方法可以得到这个信息,但我强烈建议你不是走下去!

+0

嗯,我猜控制器管理这些是sendViewController,但我把这个控制器作为一个孩子在另一个控制器上,并在该控制器我需要获取TextField信息 – Shinonuma 2013-04-04 14:14:23

+0

不,您不需要。你需要一个好的模型结构来告诉你这个文本字段中的文本应该是什么。 – Mundi 2013-04-04 14:22:50

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/setter方法如下::

的NSString *文本= [OBJ nameCell] //等等

0

您可以使用此4层的方法

一)保持引用您childviewcontroller - >获得的价值直接 B)使用的委托方法(最适合观察你的文本字段)的变化) c。发送NSNotification - >这与开销,以及在某些点,它可以帮助你很多 D)KVO

+0

如果您发送通知,您是否可以将该通知传递给变量? – Shinonuma 2013-04-04 14:08:59