[OC] Delegate的使用
建立两个页面 A 和 B,我们假设他们的文件名为ControllerA,ControllerB
由A页面,点击跳转到B页面。在B页面中,进行一些操作,并得到一个值,并将这个值传回给A页面,并在A页面上显示出来(或者进行其他的操作)
首先,我们要在ControllerB的 .h 文件中声明协议(在interface那一行的前面),同时声明委托代理人(在interface那一行的后面):
@protocol ControllerBDelegate //声明协议,一般格式是 类名+delegate //代理方法
@required//required表示一定要实现,optional则是可以选择实现的 -(void)sendAMessage:(NSString*)msg;
//-(void)触发事件名:(参数类型)参数名; @end @interface ControllerB :UIViewController //委托代理人,注意是weak
@property(nonatomic,weak)id delegate; @end
接下来在 ControllerB.m 的文件中写入:
-(void)whenSomethingHappened //controllerB中的事件被触发,比如你可以让一个按钮的点击事件为这个函数
{
NSString *message = @"世界属于三体!";
if([_delegate respondsToSelector:@selector(sendAMessage:)]) { //如果协议响应了sendMessage:方法
[ _delegate sendAMessage:message ];//通知执行协议方法
}
}
接下来,在 ControllerA.m 文件中 增加delegate的定义:
@interface ControllerA()<ControllerBDelegate> @end
并且在 ControllerA.m 中实例化一个controllerB,同时一定要在实例化controllerB之后添加下面这个语句将controllerB的被委托人设置为自己。
ControllerB *controllerB = [[controllerB alloc] init];
controllerB.delegate=self;//设置代理
之后在 controllerA.m 文件中就可以添加:
-(void)sendAMesaage:(NSString*)message
{
doWhatYouWant
/*
当B中触发了delegate事件之后,A也会被触发这里所写的事件,同时可以使用由B传来的值
比如这个例子里传来的值 message 是就是前面我们自定义的那句@“世界属于三体!”
*/
}
[OC] Delegate的使用的更多相关文章
- oc Delegate
把内部的状态通知给外界,我们可以制定一个变量,然后这个变量从外界来指定,之后我们可以通过变量去通知给外界有什么发生了. 按照上文讲的到新建一个protocol,名字为IPeople #import & ...
- 在OC中调用Swift类中定义delegate出现:Property 'delegate' not found on object of type ...
找了许久没找到答案, 在下面的链接中, 我解决了这个问题: http://stackoverflow.com/questions/26366082/cannot-access-property-of- ...
- 从OC和C#中找乐趣:相同又不同的delegate
不想说话,本来第一段打了一大堆废话,结果浏览器崩溃了...直接进入正题吧.看Demo: C#里面也有delegate,我今天的目的就是模仿着OC里面的写法来写一个网络请求模拟类.先建一个“Protoc ...
- OC语言-block and delegate
参考博客 OC语言BLOCK和协议 iOS Block iOS Block循环引用精讲 iOS之轻松上手block 深入浅出Block的方方面面 Block apple官方参考 1.定义一个block ...
- OC中APPDelegate[[UIApplication shareApplication]delegate]]Swift实现
直接上代码: var myDelegate:AppDelegate? myDelegate = UIApplication.sharedApplication().delegate as? AppDe ...
- iOS代码规范(OC和Swift)
下面说下iOS的代码规范问题,如果大家觉得还不错,可以直接用到项目中,有不同意见 可以在下面讨论下. 相信很多人工作中最烦的就是代码不规范,命名不规范,曾经见过一个VC里有3个按钮被命名为button ...
- iOS开发--JS调用原生OC篇
JS调用原生OC篇 方式一(反正我不用) 第一种方式是用JS发起一个假的URL请求,然后利用UIWebView的代理方法拦截这次请求,然后再做相应的处理. 我写了一个简单的HTML网页和一个btn点击 ...
- OC编程之道-接口适配之适配器
已有的类与新的接口之间不兼容的问题相当普遍,人们已为它找到了一个解决方案.这个解决方案就是适配器. 1 何为适配器 what 适配器的主要作用是把被适配者的行为传递给管道另一端的客户端. 将一个类的接 ...
- JS代码和OC代码的相互调用
JS调用OC 很多应用里面或多或少的调用了网页,来达到绚丽的效果,所谓的JS调用OC.....举个例子吧,网页上有个按钮 点击按钮跳转界面,跳转的动作由OC的代码实现. OC调用JS 还是举个例子,我 ...
随机推荐
- linux基础实操四
实操一: 1)为新加的硬盘分区,一个主分区大小为10剩余空间给扩展分区,在扩展分区上划分2个逻辑分别为5G 2)式化主分区为ext3系统 #mkfs.ext3 /dev/sdb1 3 将逻辑分区设置为 ...
- nmap 扫描信息收集
1.端口镜像 port Mirroring 功能通过在交换机上或者路由器上,将一个或者多个源端口的数据流量妆发大奥某一个指定的端口来实现对网络的监听,指定端口成为镜像端口或目的端口. 2.ARP攻击捕 ...
- django----图书管理
待完成 from django.db import models # Create your models here. class Book(models.Model): nid = models.A ...
- 一个简单的binlog恢复测试
日常的数据备份及恢复测试,是DBA工作重中之重的事情,所以要做好备份及测试,日常的备份常见有mysqldump+binlog备份.xtrabackup+binlog备份,无论那一种,几乎都少不了对bi ...
- C++ Primer 笔记——函数
1.函数内的局部静态对象在程序的执行路径第一次经过对象定义语句的时候初始化,并且直到程序终止才被销毁,在此期间即使对象所在的函数结束执行也不会对它有影响. size_t get_count() { ; ...
- MongoDB数据库备份与还原、单表的导入导出
-------------------MongoDB备份与恢复------------------- 1.MongoDB数据库备份 1.语法: mongodump -h dbh ...
- 步步為營-96-MyMVC2
說明:地址欄中的URL還存在一些不足之處 地址欄中最好能是http"www.sss.com/asdf/aaa 1.1 模擬路由的原理:創建Routing文件夾,并添加URLRoutingMo ...
- 20165206 2017-2018-2 《Java程序设计》第9周学习总结
20165206 2017-2018-2 <Java程序设计>第9周学习总结 教材学习内容总结 URL类:URL类是java.net包中的一个重要的类,使用URL创建对象的应用程序称为客户 ...
- linux 搭建testlink的问题总结
testlink问题总结 1.要求环境centos7,安装php版本5.5以上(7.1.5),mysql5.6 ,5.7测试还不行(改变挺大的5.7表结构,字段啥的待研究),apache任意版本即可 ...
- 正则表达式匹配URL或者网址
正则表达式 (http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])? ...