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

iOS页面间传值详解(一)

作者: cherry1024 | 来源:发表于2018-03-29 15:32 被阅读0次

    一、A页面传值给B界面:

    采用的传值方式:属性传值,在A页面跳转B界面的地方直接给B界面的属性赋值即可。

    二、A页面跳转到B界面,由B界面向A界面传值

    采用的传值方式:delegate传值和通知传值

    1.delegate传值
    • 步骤一:由于B界面是委托方,所以将协议及方法需要写在B界面中
    @protocol ViewControllerBDelegate
    - (void)sendValue:(NSString *)value;
    @end
    
    • 步骤二:在B界面中设置代理(为了避免循环引用这里使用weak修饰)
    @property (nonatomic,weak) id <ViewControllerBDelegate> delegate;
    
    • 步骤三:从B界面传值
    // B界面返回A界面的点击方法
    - (void)buttonClick {
        [self.delegate sendValue:self.textField.text];
        [self.navigationController popViewControllerAnimated:YES];
    }
    
    • 步骤四:由于A界面是代理方,在A界面跳转到B界面的地方,设置界面B的代理为界面A
    // 在A界面中点击按钮跳转到B界面,按钮的点击方法
    - (void)buttonClick {
        ViewControllerB *VC = [[ViewControllerB alloc] init];
        VC.delegate = self;
        [self.navigationController pushViewController:VC animated:YES];
    }
    
    • 步骤五:在界面A中实现代理方法
    // 将B界面传过来的值显示在A界面的label上
    - (void)sendValue:(NSString *)value {
        self.label.text = value;
    }
    
    2.通知传值

    由B界面向A界面传值,所以是B界面发送通知,A界面监听并接收通知

    • 步骤一:B界面发送通知
    // 在B界面返回A界面的点击事件中,发送了一个名称为test的通知,将B界面中textfield上输入的值传入
    - (void)buttonClick {
        NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
        [center postNotificationName:@"test" object:nil userInfo:[NSDictionary dictionaryWithObject:self.textField.text forKey:@"text"]];
        [self.navigationController popViewControllerAnimated:YES];
    }
    
    • 步骤二:A界面监听并响应通知
    //  A界面监听名称为“test”的通知
    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
        [center addObserver:self selector:@selector(receiveNotification:) name:@"test" object:nil];
    
    //  响应通知的方法,将传入的值显示在A界面的label上
    - (void)receiveNotification:(NSNotification *)noti {
        self.label.text = [noti.userInfo objectForKey:@"text"];
    }
    
    • 步骤三:不使用通知时,在A界面移除监听
    - (void)dealloc {
        [[NSNotificationCenter defaultCenter] removeObserver:self];
    }
    

    反向传值中还可以使用block和KVO等方式,后续更新~

    相关文章

      网友评论

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

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