iOS Block界面反向傳值

 

在上篇博客 《iOS Block簡介》 中,側重解析了 iOS Block的概念等,本文將側重於它們在開發中的應用。html

Block是iOS4.0+ 和Mac OS X 10.6+ 引進的對C語言的擴展,用來實現匿名函數的特性。
用維基百科的話來講,Block是Apple Inc.爲C、C++以及Objective-C添加的特性,使得這些語言能夠用類lambda表達式的語法來建立閉包。關於閉包,一句話解釋簡潔明瞭:閉包就是可以讀取其它函數內部變量的函數。閉包

在iOS開發中,Block有不少方面的用途,界面反向傳值就是其中之一。函數

假如咱們有一個需求以下:界面A上面有一個button、一個label。從界面A跳轉到界面B,在界面B的輸入框中輸入字符串,在界面A的label上顯示。這是一個典型的反向傳值的例子。這個例子的核心是:「在界面B的輸入框中輸入字符串,在界面A的label上顯示」。Block實現反向傳值。post

 

一、在第二個視圖控制器的.h文件中定義聲明Block屬性:atom

//定義block
@property (nonatomic,copy) void (^NextViewControllerBlock)(NSString *tfText);

 

@interface NextViewController ()

@property (weak, nonatomic) IBOutlet UITextField *inputTF;

@end


- (IBAction)BtnAction:(id)sender {
    
    //判斷block是否爲空
    if (self.NextViewControllerBlock) {
        self.NextViewControllerBlock(self.inputTF.text);
        
    }
    
    [self.navigationController popViewControllerAnimated:YES];
}

 

 

二、在第一個視圖中得到第二個視圖控制器,而且用第二個視圖控制器來調用定義的屬性:url

@interface AViewController ()
@property (weak, nonatomic) IBOutlet UILabel *nextVCInfoLabel;

@end

 

- (IBAction)btnClicked:(id)sender {
    
    NextViewController *nextVC = [[NextViewController alloc]init];
    nextVC.NextViewControllerBlock = ^(NSString *tfText){
        self.nextVCInfoLabel.text = tfText;
    };
    
    [self.navigationController pushViewController:nextVC animated:YES];
}

 

 

 效果如圖:spa

 

 

因爲本文用的是XIB,省略了部分UI細節,附上本文的代碼連接:源碼.net

哪裏寫的很差,望評論指點。謝過~code

相關文章
相關標籤/搜索