美文网首页
iOS页面间传值详解(二)

iOS页面间传值详解(二)

作者: cherry1024 | 来源:发表于2018-03-30 16:42 被阅读0次

    iOS页面间传值详解(一)中,介绍了iOS界面间的正向传值以及逆向传值的两种方法,其实逆向传值还可以使用block和KVO等方式,下面介绍这两种传值方式。

    情景回顾

    有两个界面,ViewControllerA和ViewControllerB,在ViewControllerA中有一个label和跳转到B界面的一个按钮,在ViewControllerB中有一个textField和返回A界面的按钮,需要将B界面中textField上属于的值显示在A界面的label上。

    1.block逆向传值
    • 步骤一:B界面定义一个block并声明一个属性
    typedef void (^valueBlock) (NSString *strValue);
    // 声明属性
    @property (nonatomic, copy) valueBlock valueBlock;
    
    • 步骤二:在B界面返回A界面的地方,把需要返回的值给block的参数
    - (void)buttonClick {
        __weak typeof(self) weakSelf = self;
        if (weakSelf.valueBlock) {
            weakSelf.valueBlock(weakSelf.textField.text);
        }
        [self.navigationController popViewControllerAnimated:YES];
    }
    
    • 步骤三:在A界面回调block
    - (void)buttonClick {
        ViewControllerB *VC = [[ViewControllerB alloc] init];
        VC.valueBlock = ^(NSString *strValue) {
            self.label.text = strValue;
        };
        [self.navigationController pushViewController:VC animated:YES];
    }
    
    2.KVO方式传值
    • 步骤一:在A界面中定义属性并在A界面跳转B界面的方法中添加观察者
    // 添加属性
    @property (nonatomic, strong) ViewControllerB *viewControllerB;
    
    - (void)buttonClick {
        self.viewControllerB = [[ViewControllerB alloc] init];
        [self.viewControllerB addObserver:self forKeyPath:@"text" options:NSKeyValueObservingOptionNew context:nil];
        [self.navigationController pushViewController:self.viewControllerB animated:YES];
    }
    
    • 步骤二:在A界面中实现监听对应Key值变化的方法
    - (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary<NSKeyValueChangeKey,id> *)change context:(void *)context {
        if ([keyPath isEqualToString:@"text"]) {
            self.label.text = self.viewControllerB.text;
        }
    }
    
    • 步骤三:在B界面返回A界面的方法中,将值赋给对应的属性
    // 在.h文件中设置对应的属性
    @property (nonatomic, strong) NSString *text;
    // 赋值
    - (void)buttonClick {
        self.text = self.textField.text;
        [self.navigationController popViewControllerAnimated:YES];
    }
    

    相关文章

      网友评论

          本文标题:iOS页面间传值详解(二)

          本文链接:https://www.haomeiwen.com/subject/mskicftx.html