[iOS开发]block传值

Posted Billy Miracle

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[iOS开发]block传值相关的知识,希望对你有一定的参考价值。

在两个界面传值时可以用到block传值,本文示例是由第一个视图控制器push出第二个视图控制器,更改第二个视图的textField的text,返回第一个视图后第一个视图的label文字改变。此外,第二个视图控制器textField的text与第一个视图的label的文字一致。

使用

第一步,先声明属性,在第二个视图控制器中:

@property (nonatomic, strong) void(^firstBlock)(NSString *text);
@property (nonatomic, copy) NSString*(^secondBlock)(void);

第一个没有返回值,有一个参数,第二个有返回值,没有参数。
第二步,在第一个视图控制器的按钮事件中:

- (void)pressSkip {
    SecondViewController * secondPage = [[SecondViewController alloc] init];
    secondPage.firstBlock = ^(NSString * str) {
        self.textLabel.text = str;
    };
    secondPage.secondBlock = ^NSString*(void) {
        return self.textLabel.text;
    };
    [self.navigationController pushViewController:secondPage animated:YES];
}

第三步,第二个视图控制器要接受一个返回值,并传一个参数:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    self.view.backgroundColor = [UIColor whiteColor];
    _textField = [[UITextField alloc] initWithFrame:CGRectMake(100, 200, self.view.frame.size.width - 200, 40)];
    _textField.borderStyle = UITextBorderStyleLine;
    [self.view addSubview:_textField];
    
    if (_secondBlock) {
        _textField.text = _secondBlock();
    }
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    if (_firstBlock) {
        _firstBlock(_textField.text);
    }
}

效果:



以上是关于[iOS开发]block传值的主要内容,如果未能解决你的问题,请参考以下文章

[iOS开发]block传值

iOS:使用block进行类与类,控制器与控制器之间的传值

iOS-Block总结 && 全面解析逆向传值

整理IOS中Block用作属性传值回调用法

iOS开发常用传值方式的比较

iOS开发之界面间传值