ViewController之间如何传值
2015-12-01 13:58
246 查看
按照这篇博文,ViewController之间传值的方法有十种之多。
我在这段时间用到了三种方法:
以下论述均假定:A控制器传值给B控制器
在A控制器.m文件的
在B控制器.m文件的
然后就可以在B控制器中直接调用
然后在B控制器中解档调用。
在A控制器.h文件中设置属性:
并在A控制器.h文件中执行方法:
而在B控制器中引入A的.h文件
声明方法
当(A *)a在B控制器的.m文件中执行
我在写浏览器代码时并没用代理方法实现控制器之间的传值。而是在UICollectionView与UICollectionViewCell交互时用到这个方法。在UITableView中,官方提供了
我参考了Stackoverflow答案
http://stackoverflow.com/a/23095967/5243422
遵循 UICollectionViewCell请求UICollectionView删除自己 的思路,解决了这个问题。
我在这段时间用到了三种方法:
以下论述均假定:A控制器传值给B控制器
1.extern
extern方法是最简单的。在A控制器.m文件的
@Implementation字头前声明变量,例如
NSString *str;。
在B控制器.m文件的
@Implementation字头前声明变量
extern NSString *str;。
然后就可以在B控制器中直接调用
str。
2.NSUserDefaults
NSUserDefaults其实和归档类似。就是在A控制器.m文件中归档要传值的参数。NSData *encodedStr = [NSKeyedArchiver archivedDataWithRootObject:Astr]; NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; [defaults setObject:encodedStr forKey:@"str"];
然后在B控制器中解档调用。
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; NSData *decodedStr = [defaults objectForKey:@"str"]; if (Bstr == nil) { Bstr = [[NSString alloc]init]; } if(encodedStr == nil { NSMutableArray *newStr = [[NSString alloc] init]; Bstr = newStr; }else{ Bstr = (NSMutableArray *)[NSKeyedUnarchiver unarchiveObjectWithData:decodedStr]; }
3.设置委托
在A控制器.h文件的@Interface字头前设置代理:
@protocol AtoBDelegate <NSObject> @required - (NSString *)doWith:(NSString *)parameter; @end
在A控制器.h文件中设置属性:
@property id<AtoBDelegate> delegate;
并在A控制器.h文件中执行方法:
[self.delegate doWith:(NSString *)parameter];
而在B控制器中引入A的.h文件
#import "A.h"并添加代理
<AtoBDelegate>,然后在.m文件中指定代理
[(A *)*a setDelegate:self];//(A *)只是表明类型,实际中不用出现
声明方法
- (NSString *)doWith:(NSString *)parameter{ self.Btr = [self doWith:(NSString *)str]; }
当(A *)a在B控制器的.m文件中执行
doWith:Astr方法时即实现传值。
我在写浏览器代码时并没用代理方法实现控制器之间的传值。而是在UICollectionView与UICollectionViewCell交互时用到这个方法。在UITableView中,官方提供了
indexPathForSelectedRow可以返回indexPath,从而删除选定行。但在UICollectionView只有
indexPathsForSelectedItems返回数组,无法返回单个indexPath。所以要实现删除选定单元就只能另辟蹊径。
我参考了Stackoverflow答案
http://stackoverflow.com/a/23095967/5243422
遵循 UICollectionViewCell请求UICollectionView删除自己 的思路,解决了这个问题。
相关文章推荐
- DES加密
- spark 1.5.2配置记录
- nginx-1.9.1安装
- iOS开发之UIWebView
- Establishment of a TCP connection, state diagram
- linux printf不加换行显示问题
- Java计时器
- CountDownLatch 介绍
- Picked up JAVA_TOOL_OPTIONS: -agentlib:jvmhook Picked up _JAVA_OPTIONS: -Xrunjvmhook -Xbootclasspa
- CentOS下编译安装Node.js 5.1.0
- 职场菜鸟-感恩-一位计算机爱好者的求学之路总结
- 表单中Readonly和Disabled的区别
- Oracle存储过程 使用游标、数组的配合查询
- word 2010 建立多级结构和目录
- Pell方程(求形如x*x-d*y*y=1的通解。)
- .net学习之路——调试程序
- nginx phase handler的原理和选择
- asp dropdownlist 读不到值
- 智能指针
- 编译工具链(GCC)建立