将数据从ChildViewController传递到ParentViewController

时间:2014-06-09 18:59:06

标签: ios objective-c

我有2个观看次数ParentViewControllerChildViewController;我想在ChildViewController内嵌套ParentViewController。我在Storyboard中设计了ParentViewControllerChildViewControllerParentViewController.m包含父项的逻辑,ChildViewController.m包含子项的逻辑。在ParentViewController.m中,我像这样添加孩子:

 ChildViewController *childVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ChildSBI"];
 [self addChildViewController:childVC];

我的问题:我怎样才能从孩子那里收到回到父母的信息(如NSString)?我应该通过delegation吗?

1 个答案:

答案 0 :(得分:1)

一种常见模式是将child作为parent的属性,并让parent成为child的委托。您需要做的第一件事就是制定自己的协议。

// MyProtocol.h
- (void)heyParentSomethingHappened:(Something)something;

接下来,将child设为parent的属性,以便他们可以通过委派进行交谈。

// ParentVC.m
@interface ParentVC()
@property (nonatomic) ChildVC *child
@end

现在parentchild作为属性,他们需要一些方式来交谈。这是代表团进来的地方。让父母符合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]];
}

请记住在使用时始终包含协议文件。