iOS设计中的“代理”
“代理”--在iOS的开发设计中是一个非常重要的概念,同时又是十分基础的知识。所以,掌握“代理”势在必行!
以下,结合一个具体的例子,详细认识“代理”:

1, 图例解释:
①:定义两个文本输入框UITextFiled,上面一个,下面一个。
②:要求:在下面的输入框中国输入内容时,上面的文本框中实时、同步显示;
③:下面的文本输入框以及紫色的背景部分要求是一个独立的,抽取出来的“类”,直接在视图控制器中初始化出一个UIView,其中有一个“UITextFiled”和一个提示“UILable”。
2,实现功能的整体思路和注意事项:
①:下面的输入框中的输入内容一旦有变化,就实时、同步的改变上面的输入框的内容----这就需要对下面的文本框的内容进行“内容改变事件的监听”;应对方法:向下面的UITextFiled添加监听事件,即:
[bottomTextFiledaddTarget:selfaction:@selector(changeText:) forControlEvents:UIControlEventEditingChanged];
需要注意监听事件的出触发方式:“UIControlEventEditingChanged”--值改变时,触发。监听事件一旦触发马上执行“changeText”方法。
②:“changeText”方法的作用:
一旦监听到“值改变”,则立刻将当前的下面的文本输入框的内容给到上面的文本输入框;
③:一个抽取出来的类如何改变控制器上的控件的状态?此时就到了“代理”发光发热了!
④:“代理”:A要做一件事情,可是A的“能力”达不到(一般是指,A不能获取到要控制的对象),这时候,A就要找一个“代理”--B,B必须具备完成A想做的事情的“能力”;
B要随时根据A的“命令”,去做A想做的事情。这就是“代理”的通俗解释。
⑤:如何找到自己的“代理”?
第一步:要定义一个协议,规定“代理”要执行的方法;
@protocoltextDelegateProtocol<NSObject> - (void) deliverText:(NSString *)content; @end
第二步:为自己设置一个代理属性,要能够在外部访问(写在.h文件中);
@property(nonatomic,weak) id<textDelegateProtocol> delegate;
第三步:找到能替"我"完成事情的对象,让该对象遵守协议,并做我的“代理”;
BottomView * bView=[[BottomViewalloc] initWithFrame:CGRectMake(, kHeight-, kWidth, )];
_bView=bView;
//======------ 设置代理 ------======
bView.delegate=self;
[self.viewaddSubview:bView];
}
//遵守代理协议
@interfaceViewController ()<textDelegateProtocol> @end
第四步:让“代理”为我做事;
#pragma mark - 触发监听事件
- (void) valueChanged:(UITextField *)tf{ [_bViewchangeContent:tf.text]; } #pragma mark - 代理方法
- (void) deliverText:(NSString *)content{ _topTextFiled.text=content; }
以上就是在下当前对代理的理解!青山不改,绿水长流。
iOS设计中的“代理”的更多相关文章
- iOS开发 中的代理实现
iOS开发 中的代理实现 关于今天为什么要发这篇文字的原因:今天在和同事聊天的时候他跟我说项目中给他的block有时候不太能看的懂,让我尽量用代理写,好吧心累了,那就先从写个代理demo,防止以后他看 ...
- 学习iOS设计--iOS8的颜色、文字和布局学习
在去年,Apple针对新时代用户彻底更新了其设计语言.现在的设计语言相对之前大为简化,能够让设计师将精力集中到动画和功能上,而不是繁复的视觉细节上. 很多人都曾问过我:设计应当如何入门?成为一名优秀设 ...
- 关于iOS APP中网络层的设计
在iOS开发中,请求网络数据,处理获得的数据是很常见的功能,但是很少有资料会讨论关于网络的处理应该放在MVC中得哪个层中. 我在网上Google了一番,记下了几个觉得比较不错的链接.现记录如下: ht ...
- iOS 11 APP 设计中的几个 UI 设计细节
Apple 官网看了 iOS 11 的介绍,发现有不少的更新哦,比如控制中心.Siri.Live Photo 等等,总体来说都有很多不错的体验,不过本文不介绍功能,只说视觉界面. 在 iOS 11 的 ...
- iOS开发之OC与swift开发混编教程,代理的相互调用,block的实现。OC调用Swift中的代理, OC调用Swift中的Block 闭包
本文章将从两个方向分别介绍 OC 与 swift 混编 1. 第一个方向从 swift工程 中引入 oc类 1. 1 如何在swift的类中使用oc类 1.2 如何在swift中实现oc的代理 ...
- iOS开发之swift与OC混编出现的坑,oc中不能对swift的代理进行调用,不能访问swift中的代理,swift中的回调方法
1. Swift与oc混编译具体怎么实现,这儿我就不重复讲出了,网上有大把的人讲解. 2. 在swift与OC混编的编译环境下, oc类不能访问swift创建类中的代理? 解决方法如下: 在代理的头部 ...
- iOS开发中的4种数据持久化方式【二、数据库 SQLite3、Core Data 的运用】
在上文,我们介绍了ios开发中的其中2种数据持久化方式:属性列表.归档解档.本节将继续介绍另外2种iOS持久化数据的方法:数据库 SQLite3.Core Data 的运 ...
- iOS开发中的MVC设计模式
我们今天谈谈cocoa程序设计中的 模型-视图-控制器(MVC)范型.我们将从两大方面来讨论MVC: 什么是MVC? M.V.C之间的交流方式是什么样子的? 理解了MVC的概念,对cocoa程序开发是 ...
- iOS开发中文件的上传和下载功能的基本实现-备用
感谢大神分享 这篇文章主要介绍了iOS开发中文件的上传和下载功能的基本实现,并且下载方面讲到了大文件的多线程断点下载,需要的朋友可以参考下 文件的上传 说明:文件上传使用的时POST请求,通常把要上传 ...
随机推荐
- python 读取 redis -安装redis-py
先下载 https://github.com/andymccurdy/redis-py 到本地 然后打开 Cmd.exe 进入当前目录 后执行 执行成功后,在python里检测 没有任何错误提示 就 ...
- Centos: 修改 yum安装的mysql路径
1.使用命令service mysqld stop 停止mysql查看mysql数据库的默认路径:/var/lib/mysql使用cp -afir /var/lib/mysql/* /usr/l ...
- 9月27日Bootstrap
Bootstrap,来自 Twitter,是目前最受欢迎的前端框架.Bootstrap 是基于 HTML.CSS.JAVASCRIPT 的,它简洁灵活,使得 Web 开发更加快捷.Bootstrap ...
- Python capitalize()方法
Python capitalize()方法 capitalize()方法返回字符串的一个副本,只有它的第一个字母大写.对于8位的字符串,这个方法与语言环境相关. 语法 以下是capitalize()方 ...
- python --- Python中的callable 函数
python --- Python中的callable 函数 转自: http://archive.cnblogs.com/a/1798319/ Python中的callable 函数 callabl ...
- DllMaps
http://www.mono-project.com/docs/advanced/pinvoke/dllmap/ http://www.mono-project.com/docs/advanced/ ...
- IPcamera
1.IPcamera 一般架构 IPcamera产品其实是一个小型的对外直播系统,一般通过rtsp协议将音视频数据传输到PC端播放器,通过rtmp协议将音视频数据传输到移动端播放器,当然有些还支持P2 ...
- .net 应用迁移到Mono 工具 (Moma)
Mono Migration Analyzer (Moma) 是一个用于开发者使用的MS .net下开发的应用程序迁移到Mono平台的不兼容性检测工具.工具通过分析.dll或者.exe程序集的代码是否 ...
- guid正则表达
a-fA-F0-9 加上下划线 _ 可以用 \w 来代替. ^\w{8}-(\w{4}-){3}\w{12}$ 如果不可以用下划线, 0-9 用 \d 代替 a-fA-F 就用其中一个 a-f,然后匹 ...
- JavaBean出现的目的
一.JavaBean出现的目的 由于只用JSP开发会发现使用了很多的Scriptlet,会使得jsp文件非常混乱.如果使用了JavaBean,则可以大大减少JSP中代码量. JSP的理想状态是只负责显 ...