首先,創(chuàng)建兩個視圖控制器,在第一個視圖控制器中創(chuàng)建一個UILabel和一個UIButton,其中UILabel是為了顯示第二個視圖控制器傳過來的字符串,UIButton是為了push到第二個界面。
第二個界面的只有一個UITextField,是為了輸入文字,當輸入文字,并且返回第一個界面的時候,當?shù)诙€視圖將要消失的時候,就將第二個界面上TextFiled中的文字傳給第一個界面,并且顯示在UILabel上。
typedef void (^ReturnTextBlock)(NSString *showText);
@interface TextFieldViewController : UIViewController
@property (nonatomic, copy) ReturnTextBlock returnTextBlock;
- (void)returnText:(ReturnTextBlock)block;
@end
第一行代碼是為要聲明的Block重新定義了一個名字
ReturnTextBlock
這樣,下面在使用的時候就會很方便。
第三行是定義的一個Block屬性
第四行是一個在第一個界面?zhèn)鬟M來一個Block語句塊的函數(shù),不用也可以,不過加上會減少代碼的書寫量
- (void)returnText:(ReturnTextBlock)block {
self.returnTextBlock = block;
}
- (void)viewWillDisappear:(BOOL)animated {
if (self.returnTextBlock != nil) {
self.returnTextBlock(self.inputTF.text);
}
}
其中inputTF是視圖中的UITextField。
第一個方法就是定義的那個方法,把傳進來的Block語句塊保存到本類的實例變量returnTextBlock(.h中定義的屬性)中,然后尋找一個時機調(diào)用,而這個時機就是上面說到的,當視圖將要消失的時候,需要重寫:
- (void)viewWillDisappear:(BOOL)animated;
在第一個控制器中獲得第二個控制器
TextFieldViewController *tfVC = segue.destinationViewController;
[tfVC returnText:^(NSString *showText) {
self.showLabel.text = showText;
}];
這時候上面(第一步中)定義的那個方法起作用了,如果你寫一個[tfVC return Text按回車? ,系統(tǒng)會自動提示出來一個:
tfVC returnText:<#^(NSString *showText)block#>
的東西,我們只要在焦點上回車,就可以快速創(chuàng)建一個代碼塊了,大家可以試試。這在寫代碼的時候是非常方便的。