IOS学习之一个示例弄懂代理(delegate)和协议
2014-05-12 22:02
411 查看
转载请注明出处
http://blog.csdn.net/pony_maggie/article/details/25655443
作者:小马
代理和协议的语法这里不赘述,自己查资料。
这个demo的思路是这样的,有一个A类,这个类不是一个基于视图类,它继承自NSObject,这个类会启动一个定时器,当定时器触发时,它会触发B视图弹出一个alert提醒。因为A类没法直接操作B视图,所以它用委托机制,“委托”B视图来操作。
新建一个view的工程,名为DelegateDemo,默认生成的这个视图就是我们的B视图。然后新建一个timeControl类,作为我们的A类。
A类的头文件先要定义一个协议,这个我们的代理要遵循的协议,然后应该还有一个公共的方法,用来启动定时器,代码如下:
然后我们看看A类的实现文件,非常简单,启动定时器,定时器触发就通过代理对象更新视图:
再来看看视图类,它首先要遵循上面定义的协议,才能”帮助”A类来处理事情,如下:
很明显,协议在这里就像中间人的作用,没有这个中间人,就无法”受理代理”。注意代理和协议并不是总要一起实现,只是大部分情况下我们会用协议来辅助实现代理。B视图的实现文件也很简单:
源码下载地址:
https://github.com/pony-maggie/DelegateDemo
http://blog.csdn.net/pony_maggie/article/details/25655443
作者:小马
代理和协议的语法这里不赘述,自己查资料。
这个demo的思路是这样的,有一个A类,这个类不是一个基于视图类,它继承自NSObject,这个类会启动一个定时器,当定时器触发时,它会触发B视图弹出一个alert提醒。因为A类没法直接操作B视图,所以它用委托机制,“委托”B视图来操作。
新建一个view的工程,名为DelegateDemo,默认生成的这个视图就是我们的B视图。然后新建一个timeControl类,作为我们的A类。
A类的头文件先要定义一个协议,这个我们的代理要遵循的协议,然后应该还有一个公共的方法,用来启动定时器,代码如下:
#import <Foundation/Foundation.h> //协议定义 @protocol UpdateAlertDelegate <NSObject> - (void)updateAlert; @end @interface TimerControl : NSObject //遵循协议的一个代理变量定义 @property (nonatomic, weak) id<UpdateAlertDelegate> delegate; - (void) startTheTimer; @end
然后我们看看A类的实现文件,非常简单,启动定时器,定时器触发就通过代理对象更新视图:
@implementation TimerControl - (void) startTheTimer { [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(timerProc) userInfo:nil repeats:NO]; } - (void) timerProc { [self.delegate updateAlert];//代理更新UI } @end
再来看看视图类,它首先要遵循上面定义的协议,才能”帮助”A类来处理事情,如下:
#import <UIKit/UIKit.h> #import "TimerControl.h" @interface DelegateDemoViewController : UIViewController<UpdateAlertDelegate> @end
很明显,协议在这里就像中间人的作用,没有这个中间人,就无法”受理代理”。注意代理和协议并不是总要一起实现,只是大部分情况下我们会用协议来辅助实现代理。B视图的实现文件也很简单:
- (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. TimerControl *timer = [[TimerControl alloc] init]; timer.delegate = self; //设置代理实例 [timer startTheTimer];//启动定时器,定时5触发 } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } //"被代理对象"实现协议声明的方法,由"代理对象"调用 - (void)updateAlert { UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"时间到" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",nil]; alert.alertViewStyle=UIAlertViewStyleDefault; [alert show]; }
源码下载地址:
https://github.com/pony-maggie/DelegateDemo
相关文章推荐
- IOS学习之一个示例弄懂代理(delegate)和协议
- IOS学习之一个示例弄懂代理(delegate)和协议
- IOS学习之一个示例弄懂代理(delegate)和协议
- iOS开发之Protocol (协议) 和delegate(代理)
- 【iOS知识学习】_协议(delegate)和类别(category)
- 【IOS沉思录】IOS中的协议Protocol与代理Delegate
- 【iOS知识学习】_协议(delegate)和类别(category)
- iOS学习笔记-----使用代理(Delegate)的页面传值
- IOS开发-UI学习-delegate(代理)的使用,键盘消失
- IOS学习之——自定义代理delegate
- 浅谈iOS开发的协议(protocol)和代理(delegate)
- iOS学习总结----代理协议1
- iOS中的协议(Protocol)与代理(Delegate)
- iOS Swift创建代理协议的多种方式示例
- IOS学习之——自定义代理 delegate
- iOS监听模式系列之关于delegate(代理,委托)的学习
- iOS开发之OC篇(13)—— Protocol(协议)、Delegate(代理)
- iOS学习总结----代理协议2
- iOS学习11--多界面使用代理传值delegate
- iOS阶段学习第30天笔记( UIViewController—Delegate(代理) )