iOS详细解析视图控制器的正向和逆向传值
来源:互联网 发布:苹果手机解压软件 编辑:程序博客网 时间:2024/05/20 03:37
本文主要介绍在不同的视图控制器之间进行传值,分为两种传值方式,正向传值比较容易,逆向传值相对于正向来说麻烦一点,需要使用代理或者是block
一、正向传值
正向传值只需要在第一个视图控制器中“拿到”第二个视图控制器,然后在跳转之前将第一个视图控制器的值赋值给第二个视图控制器所需要获得这个值的属性。跳转的方式有很多种,如果需要可以看另外一篇文章,这里就直接用 presentViewController 来示范:
说明:下面的代码是关联着storyboard
在ViewController.m文件中
@interface ViewController ()@property (weak, nonatomic) IBOutlet UITextField *textField1;@property (weak, nonatomic) IBOutlet UITextField *textField2;@end
这是跳转button的事件方法
- (IBAction)presentViewController:(id)sender{ // 在storyboard中设置secondViewController的identifier为123 SecondViewController *secondVc = [self.storyboard instantiateViewControllerWithIdentifier:@"123"]; // 关于传值的代码 secondVc.data1 = self.textField1.text; secondVc.data2 = self.textField2.text; // 注意在这里不能够直接给第二个视图控制器的lable赋值,例如下面的代码就是不正确的#if 0 secondVc.lable1.text = self.textField1.text; secondVc.lable2.text = self.textField2.text;#endif // 进行跳转 [self presentViewController:secondVc animated:YES completion:nil];}
@property (nonatomic, strong) NSString *data1;@property (nonatomic, strong) NSString *data2;@property (weak, nonatomic) IBOutlet UILabel *lable1;@property (weak, nonatomic) IBOutlet UILabel *lable2;
这是跳转的button的事件方法
在SecondViewController.m文件中
- (IBAction)presentToSecondVIewController:(id)sender{ SecondViewController *secondVc = [self.storyboard instantiateViewControllerWithIdentifier:@"123"]; // 将自己设置为第二个视图控制器的代理对象 secondVc.delegate = self; [self presentViewController:secondVc animated:YES completion:nil];}
在SecondViewController.m文件中
- (void)viewWillAppear:(BOOL)animated{ [super viewWillAppear:YES]; self.lable1.text = self.data1; self.lable2.text = self.data2;}
二、逆向传值
关于逆向传值,介绍两种最常见的方法,一种是代理/协议,一种是block,对于这两种方法的介绍利用实际的代码进行详细说明
1、代理/协议
说明:下面代码也是依赖于storyboard的
在ViewController.m文件中(需要去声明代理)
@property (weak, nonatomic) IBOutlet UILabel *lable;
这是跳转button的事件方法
- (IBAction)presentToSecondVIewController:(id)sender{ // 在storyboard中将第二个视图控制器的identifier设置为了123 SecondViewController *secondVc = [self.storyboard instantiateViewControllerWithIdentifier:@"123"]; // 将自己设置为第二个视图控制器的代理对象 secondVc.delegate = self; [self presentViewController:secondVc animated:YES completion:nil];}
#pragma mark - 第二个视图控制器的代理方法- (void)passValue:(NSString *)lableText{ self.lable.text = lableText;}
// 1、声明协议@protocol SecondViewControllerDelegate <NSObject>@optional// 2、协议的方法- (void)passValue :(NSString *)lableText;@end@interface SecondViewController : ViewController// 3、定义协议属性@property (nonatomic,weak)id<SecondViewControllerDelegate> delegate;
在SecondViewController.m中
- (IBAction)dissmissBackToVIewController:(id)sender{ // 判断这个协议方法是否被实现 if ([self.delegate respondsToSelector:@selector(passValue:)]) { // 如果实现了就将第二个视图控制器中lable的值给传到代理方法中,使得第一个类在实现代理方法的时候可以能够或者这个值(这个值在实现代理方法的时候就是方法的参数lableText) [self.delegate passValue:self.lable.text]; } // 跳转会第一个视图控制器 [self dismissViewControllerAnimated:YES completion:nil];}
2、block
说明:下面的代码是依赖于storyboard的
在ViewController.m中
这是跳转button的事件方法
@property (weak, nonatomic) IBOutlet UILabel *lable;
- (IBAction)tureToSecondVc:(id)sender{ // 在storyboard里面设置第二个视图控制器的identifier为123 SecondViewController *secondVc = [self.storyboard instantiateViewControllerWithIdentifier:@"123"]; // 实现block secondVc.backValue = ^(NSString *tel) { self.lable.text = tel; }; [self presentViewController:secondVc animated:YES completion:nil];}
在SecondViewController.h中
@property (weak, nonatomic) IBOutlet UILabel *lable;// 声明一个block(block的定义使用copy)@property (copy , nonatomic) void(^backValue)(NSString *lableText);
在SecondViewController.m中
这是返回button的事件方法
- (IBAction)dissmissBackToViewController:(id)sender{ // 当返回的时候,在block中传值 self.backValue(self.lable.text); [self dismissViewControllerAnimated:YES completion:nil];}
0 0
- iOS详细解析视图控制器的正向和逆向传值
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- 【iOS开发-26】利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- iOS开发利用协议代理实现导航控制器UINavigationController视图之间的正向传值和反向传值
- ios代理的使用,正向传值,逆向传值
- 控制器正向传值,遇到的坑
- iOS - 代理协议,正向或逆向传值,属性传值的简单实用
- EA的正向和逆向工程
- 闲谈正向和逆向
- IOS使用视图控制器和视图(四)使用UISlider 实现指定范围值的选择
- IOS开发之视图和视图控制器
- ios--视图控制器的基本概念
- ios--视图控制器的创建
- iOS 视图控制器的生命周期
- IOS视图控制器的生命周期
- iOS视图控制器的生命周期
- iOS视图控制器的生命周期
- iOS属性传值(视图控制器viewController的执行顺序的理解和懒人加载的理解)
- HDOJ 2037 今年暑假不AC (贪心)
- Hdu oj 2112 HDU Today
- 黑马程序员_集合_泛型
- Android屏幕适配全攻略(最权威的官方适配指导)
- Most Advanced Robotics Simulation Software Overview
- iOS详细解析视图控制器的正向和逆向传值
- 用下标法和指针法分别输出数组中的全部元素
- Java多线程基础总结
- WSAIoctl 的SIO_GET_EXTENSION_FUNCTION_POINTER用法
- 端口状态说明 LISTENING、ESTABLISHED、TIME_WAIT及CLOSE_WAIT
- 栈的应用之进制转换
- HUD-5399 Too Simple(数学)
- bootstrap,select
- 身份证号码的合法性校验