iOS:控制器之间的传值

2017-01-14 15:50:28来源:http://www.jianshu.com/p/2c430930b4e5作者:SoolyChristina人点击

第七城市
1.控制器之间传值

有几种方法


1.Segue

定义:Storyboard上每一根用来界面跳转的线,都是一个UIStoryboardSegue对象
属性:


//Segue ID
NSString *identifier;
//来源控制器
UIViewController *sourceViewController;
//目标控制器
UIViewController *destinationViewController;

类型:



Show
根据当前屏幕中的内容,在master area或者detail area中展示内容。
例如:如果app当前同时显示master和detail视图,内容将会压入detail区域。
如果app当前仅显示master或者detail视图,内容则压入当前视图控制器堆栈中的顶层视图。


Show Detail
在detail area中展现内容。
例如:即使app同时显示master和detail视图,那么内容将被压入detail区域
如果app当前仅显示Master或者detail视图,那么内容将替换当前视图控制器堆栈中的顶层视图。


Present Modally
使用模态展示内容。属性面板中提供presentation style (UIModalPresentationStyle)与 transition style (UIModalTransitionStyle)两种选项


Present as Popover
在某个现有视图中的锚点处使用弹出框展示内容。这个选项可指定显示在弹出框视图一边上的箭头可用方向,同时也是指定锚点视图的一个选项。
(翻译来自网友)




segue的创建
Storyboard创建Segue
Storyboard创建Segue是直接跳转并且不能添加任何的判断条件。





也可以直接按住Control键直接拖。
代码创建Segue
代码创建Segue可以增加判断条件,例如当点击某个button时,满足某个条件之后才跳转。




[self performSegueWithIdentifier:@"test" sender:self];


传值
在需要跳转的控制器实现这个方法(也就是来源控制器sourceViewController):


//在跳转之前会调用这个方法
-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender{
TestViewController *testVc = [[TestViewController alloc]init];
//设置目标控制器
testVc = segue.destinationViewController;
//传值
testVc.name = @"需要传的值"; //testVc就拿到了从来源控制器传过来的值
}


2.delegate(代理)

需求:从A控制器传一个NSString到B控制器


1.在A控制器定义协议与方法并且声明delegate变量



2.在B控制器遵循协议并且实现代理方法



3.代理变量调用代理方法并且设置代理



使用delegate需要注意的是:
必须要让控制器遵循代理协议@interface TwoViewController () <OneViewControllerDelegate>
必须设置代理self.delegate = twoVc;

3.NSNotificationCenter(通知)

1.在A控制器发送通知
//需要传的参数
NSDictionary *dict = @{@"key":value};
//发送通知
[[NSNotificationCenter defaultCenter]postNotificationName:@"sendDataToTwoVc" object:self userInfo:dict];


2.在B控制器监听通知
//监听通知(通知名字一定要写正确)
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(setData:) name:@"sendDataToTwoVc" object:nil];
//监听通知后调用
-(void)setData:(NSNotification *)notification{
NSLog(@"dict - %@",notification.userInfo);
}
//移除需要观察的通知
-(void)dealloc{
[[NSNotificationCenter defaultCenter]removeObserver:@"sendDataToTwoVc"];
}


以上就说明了常用的三种方法控制器传值还有很多方法例如Block、NSUserdefault等等。




第七城市

最新文章

123

最新摄影

微信扫一扫

第七城市微信公众平台