iOS语言中的代理模式
2015-06-30 11:11
471 查看
[b]什么是代理,为什么需要代理?[/b]
当某一个类或者试图控制器需要完成某些“动作”,但是却需要另一个类或者视图控制器作为其动作的载体。
[b]实际应用中的单例[/b]
比如当左侧滑栏leftViewController上有用户登录后显示的头像,点击头像会进入用户设置页面。而用户设置页面实际是需要从rootViewController push进入的。所以当用户点击左侧滑栏leftViewController上的用户头像时,需要左侧滑栏的代理rootViewController去执行创建用户设置页面并弹入的这一系列操作。这就是一个代理的实现。
[b]
[/b]
[b]
[/b]
在这个过程中,头像按钮是属于左侧滑栏leftViewController的点击事件,然而点击后的正真执行却是需要rootViewController来完成。那么leftViewController的作用就是在用户点击头像按钮的时候告诉系统,请让我的代理去执行点击按钮后的操作吧。
[b][b][b][b][b][b]用代码来实现一个代理[/b][/b][/b][/b][/b][/b]
首先第一步需要在leftViewController.h里做如下声明,@required表示其代理必须执行其下各个方法,@optional表示其代理可选择性的执行其下的方法
然后需要在leftViewController.m中实现代理方法
最后需要在rootViewController中声明leftViewController.delegate = self 即rootViewController可以执行其具体的代理方法操作,最后执行需要执行的代理方法即可
当某一个类或者试图控制器需要完成某些“动作”,但是却需要另一个类或者视图控制器作为其动作的载体。
[b]实际应用中的单例[/b]
比如当左侧滑栏leftViewController上有用户登录后显示的头像,点击头像会进入用户设置页面。而用户设置页面实际是需要从rootViewController push进入的。所以当用户点击左侧滑栏leftViewController上的用户头像时,需要左侧滑栏的代理rootViewController去执行创建用户设置页面并弹入的这一系列操作。这就是一个代理的实现。
[b]
[/b]
[b]
[/b]
在这个过程中,头像按钮是属于左侧滑栏leftViewController的点击事件,然而点击后的正真执行却是需要rootViewController来完成。那么leftViewController的作用就是在用户点击头像按钮的时候告诉系统,请让我的代理去执行点击按钮后的操作吧。
[b][b][b][b][b][b]用代码来实现一个代理[/b][/b][/b][/b][/b][/b]
首先第一步需要在leftViewController.h里做如下声明,@required表示其代理必须执行其下各个方法,@optional表示其代理可选择性的执行其下的方法
@protocol LeftMenuViewControllerDelegate <NSObject> @required - (void)userImageTap:(UIImageView *)sender; @optional - (void)loginButtonClicked:(UIButton *)sender; . . . @end @interface LeftMenuViewController : UIViewController @property (nonatomic, assign) id<LeftMenuViewControllerDelegate> delegate; @end
然后需要在leftViewController.m中实现代理方法
- (void)userImageTap:(id)sender{ if ([_delegate respondsToSelector:@selector(userImageTap:)]) { [_delegate userImageTap:sender]; } }
最后需要在rootViewController中声明leftViewController.delegate = self 即rootViewController可以执行其具体的代理方法操作,最后执行需要执行的代理方法即可
_leftMenuVC.delegate = self; - (void)userImageTap:(UIImageView *)sender{ [self pageReclaim]; AccountSettingViewController *accountVC = [[AccountSettingViewController alloc]initWithNibName:@"AccountSettingViewController" bundle:nil]; [self.navigationController pushViewController:accountVC animated:YES]; [accountVC release]; [self leftNavigationButtonClicked]; }
相关文章推荐
- iOS containsString与rangeOfString
- iOS 关于iphone6 和 iphone6 plus 的适配
- iOS多线程的初步研究
- iOS-block
- 转载iOS--->RunLoop
- iOS开发 xcode6制作framework静态库
- IOS的iPhone5s模拟器只显示3.5寸解决方法
- iOSOpenDev安装
- 苹果开发 笔记(43)
- 钥匙串(Keychain)服务编程指南-iOS部分
- iOS 得到系统的IP地址
- iOS 得到系统当前时间
- 构建AppleWatch应用(iOS App与WatchKit Extension的数据通信)
- 突破开发的瓶颈
- iOS高级开发, 开机启动, 无限后台运行, 监听进程
- iOS完整学习路线图
- iOS编程:学习篇(四)
- 开始写IOS开发相关的BOLG了
- 转载iOS--->NSRunLoop详解
- iOS中对文件的操作