之前一直对iOS的delegate不是很明白,一直在网上找例子看想了解清楚,但一直没理解。今天做项目的时候碰到了需要使用delegate的时候,没办法只能自己硬着头皮试试了。凭着之前对delegate的理解,自己慢慢琢磨现在算是得出一点经验吧,分享一下。
上图中,popover后面的是主view controller,popover里面装的是第二个viewcontroller,我们的目的是通过点击popover中的按钮在主view controller中实现对应的方法。
首先,先在第二个viewcontroller的.h头文件中申明我们的delegate:
- @protocol MSelectToolViewControllerDelegate
- - (void) TOOL_MEASURE_LINE;
- - (void) TOOL_MEASURE_FREE_LINE;
- @end
然后,设置一个可以set、get的变量:
- @property (nonatomic, retain) id<MSelectToolViewControllerDelegate> delegate;
再申明popover中按钮对应的方法,(直接从xib文件连线就可以完成的):
- - (IBAction)measureLineTool:(id)sender;
- - (IBAction)measureFreeLineTool:(id)sender;
然后直接在第二个viewcontroller的.m实现文件中具体实现按钮的方法:
- - (IBAction)measureLineTool:(id)sender {
- [delegate TOOL_MEASURE_LINE];
- }
- - (IBAction)measureFreeLineTool:(id)sender {
- [delegate TOOL_MEASURE_FREE_LINE];
- }
本例中是直接调用先前delegate申明的方法。
接下来的工作在主viewcontroller中完成了。。。。
在主view controller的.h头文件中import进来第二个view controller的.h头文件
并在主viewcontroller要遵守的协议中加入之前定义的delegate的名称
- @interface MotiConnectViewController : UIViewController<UIScrollViewDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate, UIPopoverControllerDelegate, MSelectToolViewControllerDelegate>
最后在主viewcontroller中设置Delegate的委托对象并实现Delegate中定义的方法,类似这样:
- MSelectToolViewController *mSelectToolViewController = [[MSelectToolViewController alloc] initWithNibName:nil bundle:nil];
- mSelectToolViewController.delegate = self;
- - (void)TOOL_MEASURE_LINE
- {
- //在这里该干嘛干嘛,填入你想要实现的代码
- }
- - (void)TOOL_MEASURE_FREE_LINE
- {
- //在这里该干嘛干嘛,填入你想要实现的代码
- }
上面是我个人通过这次码代码过程中对ios中delegate的理解,仅供大家参考。
文笔描述功力比较水,可能讲的不清楚会误导到大家,有疑问的可以回复我或参考其他大牛对delegate讲解的帖子,这里就不在赘述了。