zoukankan      html  css  js  c++  java
  • App两个页面之间的正反传值方法

    正向传值:

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

       RootViewController.m中:

       SubViewController * svc = [[SubViewControlleralloc]init];

        

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

        

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

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

        svc.delegate =self;

        

        [selfpresentViewController:svc animated:YEScompletion:^{

            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:@"****"];

  • 相关阅读:
    极客互动极客技术专题【003期】:java mvc 增删改查 自动生成工具来袭
    协议命令网络工程试验一
    主题网站分享两套免费的超棒响应式HTML5网站模板
    算法结点图的多源点最短路问题和传递闭包之FloydWarshall算法 By ACReaper
    属性页面Flexbox布局的简单演示之二
    数据库性能Quest Performance Analysis Overview
    网站查看帮助查看本地表单元素样子的网站 Native Form Elements
    文件格式配置文件weka频繁模式挖掘使用方法
    风格希望分享8个超棒的免费界面UI设计
    方法事务applicationContext.xml
  • 原文地址:https://www.cnblogs.com/anjiubo/p/5277076.html
Copyright © 2011-2022 走看看