我有2个观看次数ParentViewController
和ChildViewController
;我想在ChildViewController
内嵌套ParentViewController
。我在Storyboard中设计了ParentViewController
和ChildViewController
。 ParentViewController.m
包含父项的逻辑,ChildViewController.m
包含子项的逻辑。在ParentViewController.m
中,我像这样添加孩子:
ChildViewController *childVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildSBI"];
[self addChildViewController:childVC];
我的问题:我怎样才能从孩子那里收到回到父母的信息(如NSString)?我应该通过delegation
吗?
答案 0 :(得分:1)
一种常见模式是将child
作为parent
的属性,并让parent
成为child
的委托。您需要做的第一件事就是制定自己的协议。
// MyProtocol.h
- (void)heyParentSomethingHappened:(Something)something;
接下来,将child
设为parent
的属性,以便他们可以通过委派进行交谈。
// ParentVC.m
@interface ParentVC()
@property (nonatomic) ChildVC *child
@end
现在parent
将child
作为属性,他们需要一些方式来交谈。这是代表团进来的地方。让父母符合MyProtocol
。
// ParentVC.h
@interface ParentVC : UIViewController <MyProtocol>
现在parent
符合您的特殊协议,让child
让它成为委托。
//ChildVC.h
@interface ChildVC : UIViewController
@property (nonatomic) id <MyProtocol> delegate.
@end
既然child
具有delegate
属性,请将其设置为父级,您就可以了。
// ParentVC.m
- (id)init {
// do your init
self.child.delegate = self // both (child.delegate, self) conform to <MyProtocol>, so no type mismatch.
}
现在,当您的child
需要提醒您parent
某些内容时,他们可以通过协议+授权进行正式的讨论。
// ChildVC.m
- (void)someFunc {
[self.delegate heyParentSomethingHappend:[Something new]];
}
请记住在使用时始终包含协议文件。