对代理模式中代理方法实现和调用的简单了解
2015-09-18 09:59
423 查看
这个问题是我在多界面传值的时候遇到的,第一个界面可以直接向第二个界面传值,但是,后面一个界面不能直接向前一个界面传值,这个时候想要实现第二个界面向第一个传值就需要建立一个协议,借助这个协议实现这个功能。
首先我们要明白,第二个界面需要实现这个功能,所以第二个界面需要借助协议方法,因此第二个界面是委托人,所以
第二个界面.delegate =
self;
在第一个界面实现第二个界面的初始化,同时制定代理,这个时候就要在下面实现代理方法,注意,是实现,不是调用,这个时候就是重点了,在哪里制定代理,就要在哪里实现代理方法,在第一个界面的VC中实现的代理,所以,也要在第一个界面中实现代理方法。
-(void)nextvc
{
vc = [[myViewController
alloc]
init];
vc.str =
self.textfiled.text;
vc.delegate =
self;//指定代理
vc.modalPresentationStyle =
UIModalTransitionStyleFlipHorizontal;
[self
presentViewController:vc
animated:NO
completion:nil];
}
//实现代理方法
-(void)chuanzhi:(NSString *)str
{
self.textfiled.text = str;
}
在第二个界面我们就可以调用代理方法了,注意,是调用 不是实现
-(void)back
{
[self.delegate
chuanzhi:self.textfiled.text];//这个是调用,不是实现,一定要搞清楚实现和调用的区别,只实现一次,可以多次调用
}
注:在第一个界面初始化第二个界面,并且指定了代理,所以也要在第一个界面实现代理方法,这样就可以在第二个界面调用代理方法
首先我们要明白,第二个界面需要实现这个功能,所以第二个界面需要借助协议方法,因此第二个界面是委托人,所以
第二个界面.delegate =
self;
在第一个界面实现第二个界面的初始化,同时制定代理,这个时候就要在下面实现代理方法,注意,是实现,不是调用,这个时候就是重点了,在哪里制定代理,就要在哪里实现代理方法,在第一个界面的VC中实现的代理,所以,也要在第一个界面中实现代理方法。
-(void)nextvc
{
vc = [[myViewController
alloc]
init];
vc.str =
self.textfiled.text;
vc.delegate =
self;//指定代理
vc.modalPresentationStyle =
UIModalTransitionStyleFlipHorizontal;
[self
presentViewController:vc
animated:NO
completion:nil];
}
//实现代理方法
-(void)chuanzhi:(NSString *)str
{
self.textfiled.text = str;
}
在第二个界面我们就可以调用代理方法了,注意,是调用 不是实现
-(void)back
{
[self.delegate
chuanzhi:self.textfiled.text];//这个是调用,不是实现,一定要搞清楚实现和调用的区别,只实现一次,可以多次调用
}
注:在第一个界面初始化第二个界面,并且指定了代理,所以也要在第一个界面实现代理方法,这样就可以在第二个界面调用代理方法
相关文章推荐
- 部署一个用于测试和开发的复制集
- 部署一个用于测试和开发的复制集
- Fastcgi配置
- Fastcgi配置
- 面对 20 亿行代码,Google 如何管理?
- 意大利军方切换到 LibreOffice
- TF-IDF与余弦相似性的应用(二):找出相似文章(转)
- 关于数据科学,书上不曾提及的三点经验
- Android性能优化(四),网络优化 && 耗电量优化
- Swift 2.0学习笔记(Day 14)——字符串的插入、删除和替换
- git的使用
- 可以把PPT转为PDF的转换器
- hdu5435 数位dp(大数的处理)
- codis扩容报错:[error] READONLY You can't write against a read only slave
- angularJS中批量提交请求的batch.js(2)
- sysbench安装与使用
- 各linux文件系统比较
- django 1.8 官方文档翻译:13-6 分页
- asp.net web定时器实现及注意事项
- int strlen(const char *str)