IOS学习之一个示例弄懂代理(delegate)和协议

2023-05-16

转自http://blog.csdn.net/pony_maggie/article/details/25655443

代理和协议的语法这里不赘述,自己查资料。

 

这个demo的思路是这样的,有一个A类,这个类不是一个基于视图类,它继承自NSObject,这个类会启动一个定时器,当定时器触发时,它会触发B视图弹出一个alert提醒。因为A类没法直接操作B视图,所以它用委托机制,“委托”B视图来操作。

 

新建一个view的工程,名为DelegateDemo,默认生成的这个视图就是我们的B视图。然后新建一个timeControl类,作为我们的A类。

 

A类的头文件先要定义一个协议,这个我们的代理要遵循的协议,然后应该还有一个公共的方法,用来启动定时器,代码如下:

 

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #import <Foundation/Foundation.h>  
  2.   
  3.   
  4. //协议定义  
  5. @protocol UpdateAlertDelegate <NSObject>  
  6. - (void)updateAlert;  
  7. @end  
  8.   
  9.   
  10. @interface TimerControl : NSObject  
  11. //遵循协议的一个代理变量定义  
  12. @property (nonatomic, weak) id<UpdateAlertDelegate> delegate;  
  13.   
  14. - (void) startTheTimer;  
  15.      
  16. @end  


然后我们看看A类的实现文件,非常简单,启动定时器,定时器触发就通过代理对象更新视图:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. @implementation TimerControl  
  2.   
  3.   
  4. - (void) startTheTimer  
  5. {  
  6.   
  7.     [NSTimer scheduledTimerWithTimeInterval:5.0f target:self selector:@selector(timerProc) userInfo:nil repeats:NO];  
  8. }  
  9.   
  10. - (void) timerProc  
  11. {  
  12.     [self.delegate updateAlert];//代理更新UI  
  13. }  
  14.   
  15. @end  


再来看看视图类,它首先要遵循上面定义的协议,才能”帮助”A类来处理事情,如下:

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #import <UIKit/UIKit.h>  
  2. #import "TimerControl.h"  
  3.   
  4. @interface DelegateDemoViewController : UIViewController<UpdateAlertDelegate>  
  5.   
  6. @end  


很明显,协议在这里就像中间人的作用,没有这个中间人,就无法”受理代理”。注意代理和协议并不是总要一起实现,只是大部分情况下我们会用协议来辅助实现代理。B视图的实现文件也很简单: 

 

[objc]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. - (void)viewDidLoad  
  2. {  
  3.     [super viewDidLoad];  
  4.     // Do any additional setup after loading the view, typically from a nib.  
  5.     TimerControl *timer = [[TimerControl alloc] init];  
  6.     timer.delegate = self//设置代理实例  
  7.     [timer startTheTimer];//启动定时器,定时5触发  
  8. }  
  9.   
  10. - (void)didReceiveMemoryWarning  
  11. {  
  12.     [super didReceiveMemoryWarning];  
  13.     // Dispose of any resources that can be recreated.  
  14. }  
  15.   
  16. //"被代理对象"实现协议声明的方法,由"代理对象"调用  
  17. - (void)updateAlert  
  18. {  
  19.     UIAlertView *alert=[[UIAlertView alloc] initWithTitle:@"提示" message:@"时间到" delegate:self cancelButtonTitle:nil otherButtonTitles:@"确定",nil];  
  20.       
  21.     alert.alertViewStyle=UIAlertViewStyleDefault;  
  22.     [alert show];  
  23. }  

 

源码下载地址:

https://github.com/pony-maggie/DelegateDemo


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

IOS学习之一个示例弄懂代理(delegate)和协议 的相关文章

  • consul配置

    配置文件 1 除了命令行选项之外 xff0c 配置还可以放入文件中 在某些情况下 xff0c 这可能更容易 xff0c 例如使用配置管理系统配置Consul时 2 配置文件是JSON格式 3 配置文件不仅用于设置代理 xff0c 还用于提供
  • consul配置ACL

    1 consul配置文件目录下新增配置文件acl json 内容如下 xff08 实际使用时 xff0c 将注释删除才可使用 xff09 34 acl datacenter 34 34 dc1 34 需要acl配置的数据中心 一般默认是dc
  • centos pptp搭建,windows网关配置

    目录 一 安装 二 配置 三 运行 四 防火墙 五 限速 六 常见问题 七 windows网关设置 一 安装 yum install ppp pptpd y 需要防火墙转发 xff0c 如不想使用iptables可使用其他防火墙 yum i
  • NGINX LOCATION规则

    语法规则 xff1a location 61 uri 首先匹配 61 xff0c 其次匹配 其次是按文件中顺序的正则匹配 xff0c 最后是交给 通用匹配 当有匹配成功时候 xff0c 停止匹配 xff0c 按当前匹配规则处理请求 符号 含
  • -bash:lsnrctl:command not found错误

    哎 xff0c 这个错误折腾了我一下午 xff0c 网上搜索了半天 xff0c 没一个用得上的 现在终于知道为什么了 在linux下 xff0c 使用切换用户命令su切换到ORACLE用户时要加 xff0c 否则ORACLE下的命令全都无效
  • Docker-compose+Dockerfile构建并启动php7.4镜像

    利用官方镜像 43 Dockerfile构建符合自己要求php7 4镜像 DockerFile apt官方源太慢时 xff0c 切换apt源该dockerfile支持的php额外扩展 bcmatch event exif gd mysqli
  • docker-compose快速部署pptp,用于办公环境

    由于pptp安装部署涉及到防火墙 xff0c 路由转发 xff0c 系统内核的相关问题较为复杂 xff0c 且难以排查 xff0c 此处直接使用docker compose快速部署pptp version 39 3 39 services
  • MySQL 手动主从同步不锁表

    本文只能保证锁表时间不会太久 可能会出现从库需要跳过很多语句的情况 备份主库 mysqldump skip lock tables single transaction flush logs hex blob uroot pXXXX mas
  • 实战踩坑---MFC---CreateEvent

    使用事件CreateEvent注意事项 HANDLECreateEvent LPSECURITY ATTRIBUTESlpEventAttributes 安全属性 BOOLbManualReset 复位方式 BOOLbInitialStat
  • ARM指令中如何判断一个立即数是有效立即数

    声明 xff1a 1 本文内容为本人学习嵌入式linux所遇问题后 xff0c 为方便以后学习查阅转载所得 xff0c 若能助人 xff0c 也算报答前人之恩 xff01 2 如若侵犯原创作者权益 xff0c 请与我联系 xff0c 本人愿
  • 8.C++中的拼接字符串

    用sprintf 函数将一个变量从int类型转换到字符串类型 为了正确地完成这个任务 xff0c 你必须确保证目标缓冲区有足够大空间以容纳转换完的字符串 此外 xff0c 还必须使用正确的格式化符 如果使用了不正确的格式化符 xff0c 会
  • 左闭右开的由来(比如python等的range)

    转自 xff1a https www jianshu com p 5eaa330788e8 为了表示 2 3 12 这样一个序列 xff0c 有四种方法 xff1a 2 i lt 13 xff08 左闭右开区间 xff09 1 lt i 1
  • iOS之UITableViewController使用详解(一)tableview上移

    tableview上移解决 xff1a self edgesForExtendedLayout 61 UIRectEdgeNone if 64 available iOS 11 0 UIScrollView appearance setCo
  • matlab中各对象的position属性的相对位置

    1 figure 对象 units属性为 piexls position属性的位置 x y weight height 就是整个屏幕上的显示位置 xff1b 如 xff1a 我的屏幕分辨率是 1366 x 768 则创建figure对象时
  • 【matlab】拟合直线的方法

    1 hough变换 图像空间 gt 参数空间 图像空间的点 xff08 直角坐标系 xff09 在参数空间是一条曲线 xff08 极坐标系 xff09 曲线 xff1a 由垂直每条 过直角坐标中的点的任意斜率的直线相交 xff0c 获得角度
  • Verilog学习之数据常量表达与位宽

    本文原创内容 xff0c 转载请标明出处 原文链接 xff1a https blog csdn net Cixil article details 89422200 Verilog的表示形式 Verilog中整数 xff0c 整型常量即整常
  • matlab曲线拟合方法和函数拐点查找

    拟合曲线 polyfit 曲线拟合函数 a span class token operator 61 span span class token function polyfit span span class token punctuat
  • VS2017:用c++通过occi 读取oracle字符串数据时报错

    问题现象 xff1a 表数据 控制台的输出 xff1a 问题描述 xff1a 编译正常通过 xff0c 也能成功连接上数据库 xff0c 成功从数据库中查询数据到occi结果集 xff0c 从结果集中用getInt取整型字段的数据能成功 x
  • matlab:app designer 之组件 UIAxes 隐藏坐标轴

    问题 xff1a 用坐标轴显示图像时 xff0c 默认显示坐标轴 xff0c 影响美观 xff0c 那如何才能隐藏呢 xff1f 有人可能直接将坐标轴的颜色设置为背景颜色 xff0c 这样我们就看不见了 xff01 不否定这是一种方法 我的
  • 使用pip install安装 whl 文件出现 is not a supported wheel on this platform 解决办法

    报错提示 ERROR span class token operator span rasterio span class token operator span span class token number 1 1 span span

随机推荐

  • jni 环境搭配+第一个测试demo(全流程)

    我的环境搭配 myEclipse 2014 43 vs2017 直接下载正常安装即可 这里需要注意的是配置系统环境变量 xff0c 由于工作需要 xff08 java零基础 43 半吊子c 43 43 xff09 了解学习JNI xff0c
  • JNI中文乱码

    java gt jni gt c 43 43 c 43 43 gt jni gt java 中文显示出现乱码 主要是 Java 和 c 43 43 的编码不一致 xff0c 修改一致即可 修改Java端的看JNI中文乱码 修改c 43 43
  • JNI native函数名称问题

    本地 c 43 43 函数名称是规则是 xff1a Java 包名称 xff08 或类名称 xff09 函数名称 如 xff1a c 43 43 对应的函数名称为 xff1a Java NumberJNICpp average 61 61
  • 如何升级PowerShell

    https www cnblogs com wenBlog p 6198354 html 安装Windows PowerShell 3 0 1 安装Microsoft NET Framework 4 0的完整安装版本 xff08 dotNe
  • 系统添加根证书

    How to add CA to system root Reference KERIOOverview If you want to send or receive messages signed by root authorities
  • C++备忘录092:简单的enum到string的方法?

    godbolt span class token macro property span class token directive keyword include span span class token string lt strin
  • 用递归算法计算鸭子数

    问题描述 xff1a 一个人赶着鸭子去每个村庄卖 xff0c 每经过一个村子卖去所赶鸭子的一半又一只 这样他经过了七个村子后还剩两只鸭子 xff0c 问他出发时共赶多少只鸭子 xff1f 经过每个村子卖出多少只鸭子 xff1f xff08
  • 解决Linux下同时使用有线和无线/4G网络时,网络连接的优先级问题

    1 查看当前网关信息 ip route show 显示如下 xff1a 可以看到前两行default开头的就是默认网关 192 168 1 1是我的有线网关 xff0c 172 28 0 1是wifi网关 原来是有线网关的优先级更高导致的问
  • iOS UITableViewCell 高度自适应的解决方案

    span class token comment 设置预加载cell高度 span tableView span class token punctuation span estimatedRowHeight span class toke
  • Swift REPL

    swift 打开终端 xff0c 输入swift xff0c 启动swift swift Welcome to Apple Swift version 5 2 4 swiftlang 1103 0 32 9 clang 1103 0 32
  • xmpp 注册Registration

    在客户端上开发xmpp的注册功能 xff0c 即带内注册 带内注册指的是未在服务器上开通账号的用户可以通过xmpp协议注册新账号 相反的概念是带外注册 xff08 out of band registration xff09 xff0c 例
  • 六招让你的Ubuntu马上提速

    Ubuntu的启动速度非常快 xff0c 按了开机键之后很快就进入桌面 但我们仍然可以充分利用内存 xff0c 通过多种方法让开机速度更快 某些方法真的可以提速 xff0c 对于旧电脑的效果尤其明显 选用轻量级的桌面环境 xff0c 关闭不
  • 缺少libtinfo.so.5解决办法

    svn error svn This client is too old to work with working copy 39 39 You need to get a newer Subversion client or to dow
  • UITableViewCell动态高度设置

    UITableViewCell的高度在默认状态下能表现的的东西很少 xff0c 而且在复用的时候由于需要展示的信息不一定 xff0c 所以需要动态的调节Cell的高度来满足我们对不同内容的展示 在IOS8之前 xff0c 这需要手动进行计算
  • iOS: CGContext的函数CGContextAddQuadCurveToPoint

    void CGContextAddQuadCurveToPoint CGContextRef c CGFloat cpx CGFloat cpy CGFloat x CGFloat y
  • 怎样在android各级打印backtrace

    如何在android各层打印backtrace http janbarry0914 blogspot hk 2014 07 androiddump call stack html C 43 43 中 xff1a include lt uti
  • HOG特征(Histogram of Gradient)学习总结

    最近在做的项目有用到HOG 43 SVM这一方面的知识 xff0c 参考相关论文和网上一些博文在此对HOG特征进行下总结 参考资料 xff1a HOG的经典论文 xff1a Dalal N Triggs B Histograms of or
  • 递归-角谷定理

    问题描述 xff1a 角谷定理 输入一个自然数 xff0c 若为偶数 xff0c 则把它除以2 xff0c 若为奇数 xff0c 则把它乘以3加1 经过如此有限次运算后 xff0c 总可以得到自然数值1 求经过多少次可得到自然数1 如 xf
  • iOS之自定义导航按钮UIBarButtonItem的样式

    在一个APP中导航的重要性和方便性自然不需要多说了 xff0c 由于系统的导航用起来实在不怎么友好 xff0c 一直想抽个时间把导航学习下 由于投入到工作的时间多些 xff0c 懒懒散散的一直都是用的时候才去找度娘 xff0c 一直没来个总
  • IOS学习之一个示例弄懂代理(delegate)和协议

    转自http blog csdn net pony maggie article details 25655443 代理和协议的语法这里不赘述 xff0c 自己查资料 这个demo的思路是这样的 xff0c 有一个A类 xff0c 这个类不