iOS五种页面传值方式

来源:http://www.sh-fengwen.com 作者:鲜果干果 人气:155 发布时间:2019-10-08
摘要:A页面的值跳转到B页面之后把值传给B页面,只需要在.h文件定义属性,A页面再跳转之前赋值给B页面的实例对象属性即可。 这里要说的方式有6种:1、属性传值;2、block;3、delegate;4、

A页面的值跳转到B页面之后把值传给B页面,只需要在.h文件定义属性,A页面再跳转之前赋值给B页面的实例对象属性即可。

这里要说的方式有6种:1、属性传值;2、block;3、delegate;4、UserDefault;5、单例;6、通知

A页面(FirstViewController)部分代码:

1、block(个人觉得最常用的场景下最好用的)

在FirstViewController.m的button点击跳转方法中

先说我最常用的block吧,属性传值就很简单了,主要用于顺传,我们在这里包括下面都主要讲逆传。属性传值放在block里一起写了。下面上代码:

图片 1

//secondVc.h

B页面为TextFieldViewController,inputTextF就是B页面的属性。是不是很简单?这种传值方式一般用于正向传值给跳转界面。

typedef void (^TestBlock) (NSString *str);

首先在跳转界面B.h文件定义代理协议方法:

@interface ATNextViewController : UIViewController

图片 2图片 3

//定义block

在B.m中页面消失方法中实现委托:

@property (nonatomic, copy) TestBlock testBlock;

图片 4

@end

在A.m中遵守协议,实现协议方法,即传递了B页面的背景色给A页面:

//secondVc.m

图片 5图片 6

- (void)btnClick:(UIButton *)btn {   

协议方法:

        if(self.testBlock) { 

图片 7

        //block传值        

代理方法多用于反向传值,即跳转界面传值返回给上个界面。

       self.testBlock(@"绿色");   

方法三:通知传值

谁要监听值的变化,谁就注册通知。

A页面要监听B页面textfield的值的变化,那么他就在初始化方法里注册通知:

图片 8

当B页面的textfield的值发生变化时A页面就会执行change方法:

图片 9

在B页面消失方法中推送一个通知,相当于定义一个标识把值传给该标识通知的注册者:

图片 10

通知传值是一对多的关系,一般用于跳转界面传值给上一界面。

新建一个继承NSObject的类:

图片 11

在.h文件里声明一个属性和一个类方法:

图片 12

在.m文件实现类方法,初始化:

图片 13

在B页面消失方法里:

图片 14

在A页面即将出现方法里:

图片 15

单例方法其实就是一个只会初始化一次,然后给他赋值共享的一个单例,该方法适合正向和反向传值,但是不要滥用。

方式五:block传值

B页面传值给上一页面A:

在B页面定义一个block:

图片 16

定义声明一个方法(方便系统识别,提高开发效率):

图片 17

B页面消失方法里:

图片 18

在A页面跳转按钮方法里:

图片 19

block其实是异步的高级传值方式,适用于传值给上一页面。

博主的微博、CocoaChina博客、CSDN博客同步更新,欢迎关注:

新浪微博:

CocoaChina:

CSDN:

        }        

[self.navigationController popViewControllerAnimated:YES];

}

下面是第一个VC代码://Vc.m

- (void)btnClick:(UIButton *)btn {   

           ATNextViewController *nextVc = [[ATNextViewController alloc] init];   

           nextVc.inStr = @"红色";    //属性传值,用于顺传,直接传就好了        

           //这里是block回传的值    

nextVc.testBlock = ^(NSString *str) {        

       NSLog(@"%@",str);   

 };       

 [self.navigationController pushViewController:nextVc animated:YES];}

2、delegate

代理要首先搞清楚谁传值给谁,我这里主要写的都是逆传,内层控制器传向外层控制器,那也就是secondVc传值给Vc,所以应该是Vc作为secondVc的代理,在代理方法接收secondVc传过来的值。secondVc的代码:

//secondVc.h

//声明代理

@protocol ATNextVcDelegate

@optional

- (void)inStr:(NSString *)inStr;

@end

@interface ATNextViewController : UIViewController

@property (nonatomic, weak) <id>ATNextVcDelegate *delegate;

@end

//secondVc.m

//代理传值

- (void)btnClick:(UIButton *)btn {    

            if ([self.delegate respondsToSelector:@selector(inStr:)]) {       

                       [self.delegate inStr:@"红色"];    

            }    

           [self.navigationController popViewControllerAnimated:YES];

}

Vc代码://Vc.m

//代理方法接收值

- (void)btnClick:(UIButton *)btn {   

             ATNextViewController *nextVc = [[ATNextViewController alloc] init];    

             nextVc.delegate = self;   

             [self.navigationController pushViewController:nextVc animated:YES];

}

 #pragma mark - ATNextVcDelegate

 - (void)inStr:(NSString *)inStr {    NSLog(@"%@========", inStr);}

3、UserDefault

这种方式会在本地存下文件,属于数据持久化(关于数据持久化有时间会另开一篇详细讲解)的一种。再次打开程序依然会有上一次保存留下的值。这里只有存和取两个动作:

//secondVc.m

- (void)btnClick:(UIButton *)btn {   

            //存    

           NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];    

            [defaults setObject:@"黄色" forKey:@"btnColor"];   

            [defaults setObject:@"100x100" forKey:@"btnSize"];   

             [defaults synchronize];   

            [self.navigationController popViewControllerAnimated:YES];   

本文由美高梅游戏平台网站发布于鲜果干果,转载请注明出处:iOS五种页面传值方式

关键词:

上一篇:MacOS中同时安装OpenCV2和OpenCV3并快速切换

下一篇:没有了

最火资讯