使用Block的地方很多稳强,其中傳值只是其中的一小部分,下面介紹Block在兩個(gè)界面之間的傳值:
先說一下思想:
首先和悦,創(chuàng)建兩個(gè)視圖控制器退疫,在第一個(gè)視圖控制器中創(chuàng)建一個(gè)UILabel和一個(gè)UIButton,其中UILabel是為了顯示第二個(gè)視圖控制器傳過來的字符串鸽素,UIButton是為了push到第二個(gè)界面褒繁。
第二個(gè)界面的只有一個(gè)UITextField,是為了輸入文字馍忽,當(dāng)輸入文字棒坏,并且返回第一個(gè)界面的時(shí)候燕差,當(dāng)?shù)诙€(gè)視圖將要消失的時(shí)候,就將第二個(gè)界面上TextFiled中的文字傳給第一個(gè)界面坝冕,并且顯示在UILabel上徒探。
其實(shí)核心代碼就幾行代碼:
下面是主要代碼:(因?yàn)槲沂怯胹toryBoard創(chuàng)建的工程,所以上面的屬性和相應(yīng)的方法喂窟,是使用系統(tǒng)生成的outlet)
一刹帕、在第二個(gè)視圖控制器的.h文件中定義聲明Block屬性
typedefvoid(^ReturnTextBlock)(NSString*showText);@interfaceTextFieldViewController: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)來一個(gè)Block語句塊的函數(shù)偷溺,不用也可以,不過加上會(huì)減少代碼的書寫量
二钱贯、實(shí)現(xiàn)第二個(gè)視圖控制器的方法
- (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)來的Block語句塊保存到本類的實(shí)例變量returnTextBlock(.h中定義的屬性)中秩命,然后尋找一個(gè)時(shí)機(jī)調(diào)用尉共,而這個(gè)時(shí)機(jī)就是上面說到的,當(dāng)視圖將要消失的時(shí)候弃锐,需要重寫:
-(void)viewWillDisappear:(BOOL)animated;
方法袄友。
三、在第一個(gè)視圖中獲得第二個(gè)視圖控制器霹菊,并且用第二個(gè)視圖控制器來調(diào)用定義的屬性
如下方法中書寫:
- (void)prepareForSegue:(UIStoryboardSegue*)segue sender:(id)sender{// Get the new view controller using [segue destinationViewController].// Pass the selected object to the new view controller.TextFieldViewController *tfVC = segue.destinationViewController;[tfVC returnText:^(NSString*showText) {self.showLabel.text = showText;}];}
可以看到代碼中的注釋剧蚣,系統(tǒng)告訴我們可以用[segue destinationViewController]來獲得新的視圖控制器,也就是我們說的第二個(gè)視圖控制器旋廷。
這時(shí)候上面(第一步中)定義的那個(gè)方法起作用了鸠按,如果你寫一個(gè)[tfVC returnText按回車,系統(tǒng)會(huì)自動(dòng)提示出來一個(gè):
tfVC returnText:<#^(NSString *showText)block#>
的東西,我們只要在焦點(diǎn)上回車饶碘,就可以快速創(chuàng)建一個(gè)代碼塊了目尖,大家可以試試。這在寫代碼的時(shí)候是非常方便的扎运。
附件中是完整的工程代碼瑟曲,大家可以運(yùn)行看看效果