首先蒙秒,創(chuàng)建兩個(gè)視圖控制器,在第一個(gè)視圖控制器中創(chuàng)建一個(gè)UILabel和一個(gè)UIButton膘滨,其中UILabel是為了顯示第二個(gè)視圖控制器傳過(guò)來(lái)的字符串锹安,UIButton是為了push到第二個(gè)界面疙渣。
第二個(gè)界面的只有一個(gè)UITextField晃危,是為了輸入文字毛肋,當(dāng)輸入文字枫耳,并且返回第一個(gè)界面的時(shí)候乏矾,當(dāng)?shù)诙€(gè)視圖將要消失的時(shí)候,就將第二個(gè)界面上TextFiled中的文字傳給第一個(gè)界面迁杨,并且顯示在UILabel上钻心。
typedef void (^ReturnTextBlock)(NSString *showText);
@interface TextFieldViewController : UIViewController
@property (nonatomic, copy) ReturnTextBlock returnTextBlock;
- (void)returnText:(ReturnTextBlock)block;
@end
第一行代碼是為要聲明的Block重新定義了一個(gè)名字
ReturnTextBlock
這樣,下面在使用的時(shí)候就會(huì)很方便铅协。
第三行是定義的一個(gè)Block屬性
第四行是一個(gè)在第一個(gè)界面?zhèn)鬟M(jìn)來(lái)一個(gè)Block語(yǔ)句塊的函數(shù)捷沸,不用也可以,不過(guò)加上會(huì)減少代碼的書寫量
- (void)returnText:(ReturnTextBlock)block {
self.returnTextBlock = block;
}
- (void)viewWillDisappear:(BOOL)animated {
if (self.returnTextBlock != nil) {
self.returnTextBlock(self.inputTF.text);
}
}
其中inputTF是視圖中的UITextField狐史。
第一個(gè)方法就是定義的那個(gè)方法痒给,把傳進(jìn)來(lái)的Block語(yǔ)句塊保存到本類的實(shí)例變量returnTextBlock(.h中定義的屬性)中,然后尋找一個(gè)時(shí)機(jī)調(diào)用预皇,而這個(gè)時(shí)機(jī)就是上面說(shuō)到的侈玄,當(dāng)視圖將要消失的時(shí)候,需要重寫:
- (void)viewWillDisappear:(BOOL)animated;
在第一個(gè)控制器中獲得第二個(gè)控制器
TextFieldViewController *tfVC = segue.destinationViewController;
[tfVC returnText:^(NSString *showText) {
self.showLabel.text = showText;
}];
這時(shí)候上面(第一步中)定義的那個(gè)方法起作用了吟温,如果你寫一個(gè)[tfVC return Text按回車? ,系統(tǒng)會(huì)自動(dòng)提示出來(lái)一個(gè):
tfVC returnText:<#^(NSString *showText)block#>
的東西序仙,我們只要在焦點(diǎn)上回車,就可以快速創(chuàng)建一個(gè)代碼塊了鲁豪,大家可以試試潘悼。這在寫代碼的時(shí)候是非常方便的律秃。