2010-10-08 96 views

回答

4

创建一个protocolDetailViewDelegate?)并在您的DetailViewController中创建一个delegate属性。当您实例化视图控制器时,请将委托属性设置为self,并使用该属性将消息发送回您的主视图控制器。唯一棘手的部分是您需要将委托属性声明为“assign”,以便您不会在详细视图和主视图之间创建保留循环。


DetailViewController.h:

@class DetailViewController; // Forward Declaration. 
@protocol DetailViewDelegate 
- (void)detailViewController:(DetailViewController *)controller didChangeBool:(BOOL)theBool; 
@end 

@interface DetailViewController : UIViewController { 
    id <DetailViewDelegate> delegate; 
} 

@property (assign) id <DetailViewDelegate> delegate; 

@end 

这仅仅是接口,但它应该让你大部分的方式存在。设置详细视图的delegate属性并在您的主视图中实现detailViewController:didChangeBool:方法,就是这样。


为了回答您的评论的问题:

  1. 是。在推动详细视图控制器之前,将它的delegate属性设置为self
  2. 您需要声明您的主视图控制器实现了DetailViewDelegate协议。通过阅读Apple's Documentation了解如何做到这一点。
  3. 声明您的主视图控制器将实现协议后,您需要实际执行它。将一个detailViewController:didChangeBool:方法添加到您的主视图控制器。
+0

你可以展示一些关于如何做到这一点的代码? – 2010-10-08 22:42:07

+0

第二行的目的是什么?它真的有必要吗?我在“detailViewController”之前收到一个错误消息,说“Expected”)' – 2010-10-09 00:15:50

+1

这不是必须的,它是为你的委托对象声明一个正式的接口,除非你有充分的理由去除它,但你应该把它作为一个调试它确保你的委托实现所有你认为将要实现的方法我编辑了代码以使警告消失 – kubi 2010-10-09 01:15:24

相关问题