Block傳值解析

在子頁面向父頁面傳值的時候,能夠用代理傳值。一樣也能夠用block塊傳值。
演示1
在ViewController1中有一個UILabel和一個UIButton,UILabel用來顯示從子頁面傳過來的值,UIButton用來打開子頁面。

在ViewController2中咱們寫block定義:函數

#import <UIKit/UIKit.h>

typedef void (^ReturnTextBlock)(NSString *showText);  //爲要聲明的Block從新定義了一個名字

@interface Page1 : UIViewController
@property (nonatomic, copy) ReturnTextBlock returnTextBlock; //將一個block當作一個屬性來用
@end

在ViewController2頁面中,返回按鈕的點擊代碼以下:

- (IBAction)touchCancel:(id)sender {
    if (self.returnTextBlock != nil) {
     self.returnTextBlock(@"2323223");  //用block回傳值
    }

    [self dismissViewControllerAnimated:YES completion:nil];
}


在ViewController1界面中,UIButton的點擊代碼:
atom

Page1 *tfVC = segue.destinationViewController;
    tfVC.returnTextBlock = ^(NSString *showText) {
                self.label1.text = showText;
    };

由上面的代碼咱們看出block傳值相似與屬性傳值,只不過值是一個block塊代碼。至關於把一個回調函數付給了子頁面一個屬性。
其實在代理傳值的時候也相似,咱們也是講一個協議方法當作是一個屬性賦值給了子頁面。因而可知,Obj-C的屬性能夠傳:對象、協議、block。
相關文章
相關標籤/搜索