【发布时间】:2015-12-21 21:27:08
【问题描述】:
我试图了解委托在传递数据方面的工作方式。我认为以下两种说法都是正确的:
UITableView 示例
UITableView 对象定义了UITableViewDelegate 和UITableViewDataSource 的协议,并且委托可以符合这些协议。例如,如果您在 UIViewController 中有一个 UITableView 实例,人们通常会使 UIViewController 符合 UITableViewDataSource,在这种情况下,UIViewController 是UITableView。在此范例中,委托将数据发送回UITableView。
UIViewController 示例
我们经常需要在UIViewControllers 之间传递数据。一种方法是定义两个UIViewControllers 之间的委托关系。我们可能有一个ParentViewController 和一个ChildViewController,我们希望将数据从ChildViewController 发送到ParentViewController。为了设置它,我们在ChildViewController 中定义一个protocol 并添加一个委托属性,例如:@property (weak) id <SendDataToParent> delegate;。然后,如果我们使用 segue,我们可能会执行以下操作:
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"childvc"]) {
self.childVC = (ChildViewController *)segue.destinationViewController;
self.childVC.delegate = self;
}
}
然后当ChildViewController中发生某些事件时,我们调用[delegate sendData];或类似的方法。在此示例中,我们将数据从委托类传递给委托。
这两种都是在 Objective-C 中实现委托关系的好方法吗?
【问题讨论】:
-
第二个是的,第一个我会说只是部分。第一个是关于
UITableViewDelegate的“经典”委托模式的混合,但DataSource更可能是ModelViewController 模式的一部分(尽管使用了委托)。我不建议对这些模式进行绝对的思考。只是我的 2 美分,不要把其中的任何一点都当作某些事实,因为我喜欢使用这些模式,而不是知道每一个正确的技术理论术语;) -
第一个中的DataSource有点不同,但是还有一个UITableViewDelegate。
标签: ios objective-c delegates