设为首页 加入收藏

TOP

iOS学习——页面的传值方式(四)
2019-08-26 07:01:36 】 浏览:119
Tags:iOS 学习 面的 方式
view.backgroundColor
= [UIColor whiteColor]; self.title = @"子界面"; //布局代码省略 ....... } - (void) btnClicked:(UIButton *)btn { //发送通知回传数据,回传的数据格式自定义,这里定义为dictionary类型 [[NSNotificationCenter defaultCenter] postNotificationName:@"TransDataNoti" object:nil userInfo:@{@"content":@"子页面回传的数据"}]; [self.navigationController popViewControllerAnimated:YES]; }
  • 在主页面注册通知,并制定接收到通知后执行的操作方法。需要注意的是,在注册通知的页面消毁时一定要移除已经注册的通知,否则会造成内存泄漏。
    @interface KLMainViewController ()
    
    @property (strong, nonatomic) UITextField *textField;
    @property (strong, nonatomic) UIButton *button;
    
    @end
    
    @implementation KLMainViewController
    
    - (void)dealloc {
        //移除所有通知
        [[NSNotificationCenter defaultCenter] removeObserver:self];
        // 移除某个
        // [[NSNotificationCenter defaultCenter] removeObserver:self name:@"TransDataNoti" object:nil];
    }
    
    - (void)viewDidLoad {
        [super viewDidLoad];
        self.title = @"主界面";
        
        //布局代码省略
        ......
        
        //注册通知,用于接收通知,接收通知的名称必须和发送通知的名称保持一致才能接收到,否则无法接收到发出的通知
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notiReceived:) name:@"TransDataNoti" object:nil];
    }
    
    //接收通知,解析内容进行处理
    - (void)notiReceived:(NSNotification *)sender {
        self.textField.text = sender.userInfo[@"content"];
    }
    
    - (void) btnClicked:(UIButton *)btn {
        KLSubViewController *subVC = [[KLSubViewController alloc] init];
        [self.navigationController pushViewController:subVC animated:YES];
    }
    
    @end
    •  正向传递:和反向传递的不走基本就是反过来就OK了,但是有一点需要注意的是正向传递时从主界面push到子界面时发送通知,这时候要确保子界面已经注册了通知,否则会收不到通知的,所以正向传递时,子界面通知的注册应该在子界面的初始化init方法中进行。
    1. 在主页面返回的时候发送通知,注册的接收通知的名称必须和发送通知的名称保持一致才能接收到,否则无法接收到发出的通知。
      @interface KLMainViewController ()
      
      @property (strong, nonatomic) UITextField *textField;
      @property (strong, nonatomic) UIButton *button;
      
      @end
      
      @implementation KLMainViewController
      
      - (void)viewDidLoad {
          [super viewDidLoad];
          self.title = @"主界面";
          
          //布局代码省略
          ......
      }
      
      - (void) btnClicked:(UIButton *)btn {
          KLSubViewController *subVC = [[KLSubViewController alloc] init];
          //发送通知回传数据,回传的数据格式自定义,这里定义为dictionary类型
          [[NSNotificationCenter defaultCenter] postNotificationName:@"TransDataNoti" object:nil userInfo:@{@"content":@"主页面传递的数据"}];
          [self.navigationController pushViewController:subVC animated:YES];
      }
      
      @end
    2. 在子页面注册通知,并制定接收到通知后执行的操作方法。正向传递时注册通知、基本布局不能放在viewDidLoad中,要放在初始化函数init中。
      @interface KLSubViewController ()
      
      @end
      
      @implementation KLSubViewController
      
      - (void)dealloc {
          //移除所有通知
          [[NSNotificationCenter defaultCenter] removeObserver:self];
          // 移除某个
          // [[NSNotificationCenter defaultCenter] removeObserver:self name:@"TransDataNoti" object:nil];
      }
      
      - (instancetype)init {
          self = [super init];
          
          //初始化代码省略
          ......
          
          //注册通知,用于接收通知,接收通知的名称必须和发送通知的名称保持一致才能接收到,否则无法接收到发出的通知
          [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(notiReceived:) name:@"TransDataNoti" object:nil];
          return self;
      }
      
      - (void)viewDidLoad {
          [super viewDidLoad];
          self.view.backgroundColor = [UIColor whiteColor];
          self.title = @"子界面";
      
    首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
    】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
    上一篇IOS马甲包(诚招大量开发) 下一篇block本质探寻六之修改变量

    最新文章

    热门文章

    Hot 文章

    Python

    C 语言

    C++基础

    大数据基础

    linux编程基础

    C/C++面试题目