控制器之间反向传值

控制器之间反向传值

  • 委托(代理)

    • 首先我们定下一个协议protocol

      1.    #import <Foundation/Foundation.h>2.3.    @protocol ChangeText <NSObject>4.5.    -(void)changeText:(NSString *)str;6.    @end
    • 控制器a遵守协议ChangeText,并实现协议的方法,控制器b公开自己的一个遵守协议ChangeText的属性delegate,在控制器a的视图转到控制器b的视图时,b.delegate = a; 由b返回到a是b.delegate调用协议方法。
      1.    SecondViewController *controller = [[SecondViewController alloc] init];2.//    方法一: 委托3.controller.delegate = self;4.
      1.    // 方法一: 协议2.if (self.delegate) {3.    [self.delegate changeText:f.text];4.}5.
  • block
    • 首先在b的h文件中定义一个block,并定义block为其属性

      1.typedef void(^changeText)(NSString *);2.@interface SecondViewController : UIViewController <UITextFieldDelegate>3.@property (nonatomic,copy) changeText ct;4.@end
    • a转向b需要做的事(实现block)
      1.    //方法二: block2.    controller.ct = ^(NSString *str){3.    ((UILabel *)[self.view viewWithTag:1024]).text = str;4.   };5.
    • b返回a需要做的事
      1.    // 方法二: Block2.    self.ct(f.text);
  • 单例
    • 在整个程序中定义个单例对象,对单例对象定义一个属性用于保存需要传递的值
    • a转向b需要做的事是在由b返回到a后获取单例对象并取得其保存的b传递的值。
    • b返回a需要做的事是在由b返回到a的时候获取单例对象并对单例对象并赋值需要传递的值
  • 通知中心
    • 在对象销毁时,要注销掉观察者

      1.    -(void)dealloc{2.    //注销观察者3.    [[NSNotificationCenter defaultCenter] removeObserver:self];4.5.}
    • a转向b需要做的事
      1.    //方法三: 通知 (注册观察者,最后需要将观察者注销)2.    // 参数一: 接收通知的对象3.    // 参数二: 接收通知后做什么,做什么的参数是notification 4.    // 参数三: 接收的通知名字5.    // 参数四: 指定接收的通知的发送者6.    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(receiveNotification:) name:@"A" object:nil];7.
    • b返回a需要做的事
      1.    // 方法三: 通知2.    // 参数一: 通知名字,接收通知的标识3.    // 参数二: 发送的通知内容4.    NSNotification *notification = [[NSNotification alloc] initWithName:@"A" object:f.text userInfo:nil];5.    NSNotificationCenter *notificationCenter = [NSNotificationCenter defaultCenter];6.    // 发送通知7.    [notificationCenter postNotification:notification];
时间: 2024-10-22 05:52:32

控制器之间反向传值的相关文章

iOS:使用block进行类与类,控制器与控制器之间的传值

介绍:在iOS中类与类,控制器与控制器之间传值的方式有多种,分别是:单例传值.代理传值.通知传值.block传值或者一些偏好设置也可以用来传值.... 每一种传值方式都有各自的优点和缺点,针对不同情况选择符合需要的方式进行传值.这里我比较喜欢block方式传值,个人觉得简单好用,省却了不少代码. 下面简单给一个在控制器之间FirstViewController和SecondViewController使用block传值的例子: 在SecondViewController中: SecondView

IOS 学习笔记 2015-04-15 控制器数据反向传值

// // FirstViewController.h // 控制器数据传递 // // Created by wangtouwang on 15/4/15. // Copyright (c) 2015年 wangtouwang. All rights reserved. // #import <UIKit/UIKit.h> @interface FirstViewController : UIViewController @end // // FirstViewController.m //

angular控制器之间的传值

每个controller都会有自己的scope,所有的scope都是属于 $rootScope的子或者子的子... 那么问题就好解决了,通过 $rootScope.$broadcast 广播的事件每个controller都能收到事件 另外,我的经验是,尽量不要用event传数据.应该建立一个service来保存数据,并且设置相应getter/setter,具体如下: 每个controller依赖service, call service.setter(...) 统一的service.setter

iOS视图控制器之间delegate传值教程

之前在StackOverFlow上看到一篇讲传值(segue传值和delegate传值)的文章,感觉讲的很清晰,就将delegate部分翻译了一下,有兴趣可以看看. 原文: http://stackoverflow.com/questions/5210535/passing-data-between-view-controllers 译文: 为了从ViewControllerB往回传值到ViewControllerA,我们需要使用协议(Protocols)和代理(Delegates). 为了实现

IOS页面(控制器之间)传值之Block

B要传值给A 1.控制器B中要有一个Block: typedef void (^MyBlock)(NSString* str1,NSString* str2); str1和str2里存放着要传递的参数 2.还要有一个以Block为参数的方法 -(void)chuanzhi:(MyBlock)block{       block(self.textFiled1.text,self.textFiled2.text); } 这样self.textFiled1.text,self.textFiled2.

控制器之间的传值

页面传值总共有8种方式 -.属性传值(正向传值) 在AttributeVC.h中声明一个属性,用于接收传过来的值 在RootViewVC.m中,赋值 在AttributeVC.m中使用该值 二.代理传值()) 首先在第二个页面DelegateVC.h中定义和声明代理, 为什么delegate(代理)属性都是assign而不是retain 循环引用所有的引用计数系统,都存在循环应用的问题.例如下面的引用关系:    •    对象a创建并引用到了对象b.    •    对象b创建并引用到了对象c

Swift利用闭包(closure)来实现传值--&gt;前后两个控制器的反向传值

一.第一个界面 // Created by 秦志伟 on 14-6-13. import UIKit class ZWRootViewController: UIViewController { init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) { super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil) // Custom initializati

控制器之间传值,逆传

block有一个非常经典的操作就是控制器之间的传值: 假如说A向B传值是顺传,B向A传值是逆传 A->B顺传:仅仅须要重写prepareForSegue方法,在内部获取到B控制器.而且给B控制器内部的属性赋值就可以 B->A逆传: 1.首先要再B控制器中定义一个block,方法名一般以类名加Block命名,依据须要回传的值的个数以及类型定义相相应的參数,依据需求确定有无返回值,定义方式:typedef 返回值类型 (^类名Block)(參数类型 參数名称,--); 2.定义一个block属性@

[ios][swift]使用swift闭包进行viewcontroller反向传值

闭包参考:http://c.biancheng.net/cpp/html/2285.html   闭包详解 传值参考:http://www.tuicool.com/articles/vy2uUz Swift利用闭包(closure)来实现传值-->前后两个控制器的反向传值 import UIKit class ZWRootViewController: UIViewController { init(nibName nibNameOrNil: String?, bundle nibBundleO