界面之间2种正向 6种反向传值方式


正向传值:

一、利用present 的 block 块进行正向传值

   RootViewController.m 中:

   SubViewController * svc = [[SubViewController alloc]init];

    

    //svc.label.text = @"正向Block传值";

    

    //这句是正向的属性传值,作用是让B页面,能持有A页面的地址,B要向A进行反向传值

    //想给谁传值,就要持有谁的地址

    svc.delegate = self;


    

    [self presentViewController:svc animated:YES completion:^{

        svc.label.text = @"正向Block传值";

    }];





二、利用AB页面中的属性传值


反向传值:

一、利用block来进行 b 界面向 a 界面反向传值


a 中声明一个 block 属性,将所要传的值放入block  函数指针中,b 去接收

.h文件

@property(nonatomic,copy) void(^blockColor) (UIColor *);

.m 文件

self.blockColor([UIColor blackColor]);


注意用 copy


b.m 文件中 接收

svc.blockColor = ^(UIColor *color){

    self.view.backgroundColor = color;

};


二、通知中心和观察者模式反向传值


例: viewController1 viewController2传值

1.

Appdelegate 文件中,有一个接收所要传递的值的变量,用来保存所要传递的数据,界面1写入,界面2读取

@property (nonatomic,copy)NSString *string;


2.

viewController1 中,当要传值的时候(按钮按下时),将数据通过UIApplication 单例获取到的Appdelegate *delegate,传入Appdelegate 文件中。同时向通知中心发送一个广播


[[NSNotificationCenter defaultCenter] postNotificationName:@"鬼子来了" object:nil];


3.

viewController2 ,向通知中心注册,添加自己,成为观察者。当数据改变时,用单例delegate 读取数据


-(void)becomObserver

{

    //获得通知中心,注册成观察者

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(changeText) name:@"鬼子来了" object:nil];

}

//收到广播消息后调用 的方法

-(void)changeText

{

    //首先获取appDelegate的对象

    

    AppDelegate * appDeleagte = [UIApplication sharedApplication].delegate;

    NSString * string = appDeleagte.string;

    NSLog(@"sss:%@",string);

    

    label.text = appDeleagte.string;

    NSLog(@"label.txt = %@",label.text);

    

}



三、利用协议,界面反向传值


 AppDelegate

viewController2为委托方,viewController1为代理,

viewController2 中委托方制定协议,并且属性delegate = viewController1,要遵循协议;

viewController1 中,将viewController2对象的属性delegate 设为自己(vc1


1.ViewController1.m


  vc2.delegate = self;


2.ViewController2.h文件


//委托方制定协议,代理人必须遵守

@protocol BackValueDelegate<NSObject>

-(void)changeText:(NSString *)string

@end

@interface ViewController1 :UIViewController

//用来设置代理,并且遵守协议

@property (nonatomic,retain) id<BackValueDelegate>delegate;

@end


3. ViewController2.m 文件

 //利用代理去回传数据

    [self.delegate changeText:@"****"];


四、用系统自带的UIApplication单例进行传值


五、用自己实现的单例进行传值


六、用TargetAction 的方式进行两个界面来回反复调用传值


常用的是详细写的几种


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值