ios-协议/代理是怎么实现两个页面之间传值


  • 第一页面
    //NextViewController是push进入的第二个页面
    //NextViewController.h 文件
    //定义一个协议,前一个页面ViewController要服从该协议,并且实现协议中的方法
@protocol NextViewControllerDelegate 
 - (void)passTextValue:(NSString *)tfText;
@end
@interface NextViewController : UIViewController
@property (nonatomic, assign) id delegate;
@end

//NextViewController.m 文件
//点击Button返回前一个ViewController页面

- (IBAction)popBtnClicked:(id)sender {
    if (self.delegate && [self.delegate respondsToSelector:@selector(passTextValue:)]) {
        //self.inputTF是该页面中的TextField输入框
        [self.delegate passTextValue:self.inputTF.text];
    }
    [self.navigationController popViewControllerAnimated:YES];
}
  • 传到第一页
    • 接下来我们在看看ViewController文件中的内容,
      //ViewController.m 文件
@interface ViewController ()
@property (strong, nonatomic) IBOutlet UILabel *nextVCInfoLabel;
@end

//点击Button进入下一个NextViewController页面

- (IBAction)btnClicked:(id)sender
{
    NextViewController *nextVC = [[NextViewController alloc] initWithNibName:@"NextViewController" bundle:nil];
    nextVC.delegate = self;//设置代理
    [self.navigationController pushViewController:nextVC animated:YES];
}

//实现协议NextViewControllerDelegate中的方法

#pragma mark - NextViewControllerDelegate method
- (void)passTextValue:(NSString *)tfText
{
    //self.nextVCInfoLabel是显示NextViewController传递过来的字符串Label对象
    self.nextVCInfoLabel.text = tfText;
}

你可能感兴趣的:(ios-协议/代理是怎么实现两个页面之间传值)