界面传值

Block传值

  • 后->前
    例如有2个界面:FirstViewController 和 SecondViewController
    界面元素:
    FirstViewController: 一个Label 和 Button
    SecondViewController: 一个TextField 和 Button

  • 在SecondViewController.h中

  • 重定义block

typedef void (^SecondBlock) (NSString *);
  • 声明一个block 属性值
@property (nonatomic , copy) SecondBlock tzf;
  • 在SecondViewController.m中
  • 点击按钮实现的方法:
    - (void)back {
          if (self.tf != nil) {
          self.tzf(self.tf.text);
          }
          [self.navigationController popViewControllerAnimated:YES];
    }
  • FirstViewController.m 按钮方法中
 - (void)next {
    SecondViewController *secondVC = [[SecondViewController alloc] init];
    secondVC.tzf = ^(NSString *str){
        self.label.text = str;
    };
    [self.navigationController pushViewController:secondVC animated:YES];
}

代理传值

后- > 前

例如有2个界面:ThirdViewController 和 FourthViewController
界面元素:
ThirdViewController: 一个Label 和 Button
FourthViewController: 一个TextField 和 Button

步骤:<前3步 都是在后面的控制器中, 后面3步在第一个控制器>
  • 声明协议 <协议方法等>
  • 声明�代理属性
  • 代理对象执行协议方法
  • 指定代理对象
  • 接收协议
  • 实现协议方法
在第二个控制器FourthViewController.h中
  • 声明协议 <协议方法等>
  • 声明�代理属性
  //1、 声明协议 <协议方法等>
  @protocol FourthViewControllerDelegate 
     - (void)sendString:(NSString *)string;
  @end
  @interface FourthViewController : UIViewController
  //2、声明代理属性
     @property (nonatomic, assign) id    delegate;

  @end
在第二个控制器FourthViewController.m 返回按钮的方法中
- (void)back {
    //3、代理对象执行协议方法
    if (self.delegate != nil && [self.delegate respondsToSelector:@selector(sendString:)]) {
        [self.delegate sendString:self.textField.text];
    }
    [self.navigationController popViewControllerAnimated:YES];
}
在第 一个控制器ThirdViewController.m 按钮的方法中
- (void)push {
    FourthViewController *fourthVC = [[FourthViewController alloc] init];
    //4、指定代理对象
    fourthVC.delegate = self;
    [self.navigationController pushViewController:fourthVC animated:YES];
}
//5、接收协议
@interface ThirdViewController ()

@property (nonatomic, retain) UILabel *label;

@end
//6、实现协议方法
//为标签赋值文本的方法
- (void)sendString:(NSString *)string {
    self.label.text = string;
}


你可能感兴趣的:(界面传值)