国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS通過block在兩個頁面間傳值的方法

2020-07-26 03:04:41
字體:
來源:轉載
供稿:網友

一、功能需求

在第一個頁面中有一個button和一個label,label上默認顯示“哈哈”,點擊button進入第二個頁面。在第二個頁面有一個UITextField和一個button2,點擊button2回到第一個頁面,但同時第一個頁面的label上顯示的文字修改為剛剛在UITextField寫進去的文字。

二、先定義block

在要傳值得那個頁面定義含有block參數的方法,即在第二個頁面的.h文件中定義:

重新定義:typedef void (^ReturnTextBlock)(NSString *showText);

//重新定義block類名 void返回值類型 ReturnTextBlock類名(重命名類名) NSString *showText參數

聲明一個block變量:@property (nonatomic, copy) ReturnTextBlock returnTextBlock;

//注:此處聲明需要用copy屬性,因為block一開始是放在棧上的,只有copy后才會放到堆上。

block的調用方法:- (void)returnText:(ReturnTextBlock)block;

在.m文件中實現

block的調用方法實現代碼:- (void)returnText:(ReturnTextBlock)block {self.returnTextBlock = block;}

至此,block準備工作已完成。

三、通過block在兩個頁面間進行傳值

在第一個頁面,點擊button按鈕實現跳轉到第二個頁面并調用第二個頁面的block方法。

-(void)FirstBtnPressed{//用blockSelf修飾blockSelf.label 避免block塊內部_label被循環引用__weak ViewController *blockSelf = self;ShowViewController *orderVC=[[ShowViewController alloc]init];//block返回值(跟代理寫法挺類似的,就是語法不同,代理的話是此處是self.delegate=self;)[orderVC returnText:^(NSString *showText) {blockSelf.label.text=showText;}];[ self presentViewController:orderVC animated: YES completion:nil];}

在第二個頁面.m文件中實現button2按鈕的方法

-(void)SecondBtnPressed{//只要在變量前面增加__block,在block里面就可以修改該變量的值。當然也有其他方法如添加static等。[self dismissViewControllerAnimated:YES completion:^{//在使用block前需要對block指針做判空處理。//不判空直接使用,一旦指針為空直接產生崩潰。if (self.returnTextBlock != nil) {self.returnTextBlock(self.text.text);NSLog(@"text==%@",self.text.text);}}];}

這樣,就可以實現我們想要實現的功能了,很簡單吧。

小結

誰要傳值誰就定義含有block的參數的方法,在方法內部調用blcok,將要傳遞的參數給了blcok,blcok跳進實現它要執行代碼的'地方'執行代碼.傳值完成

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 建德市| 清水县| 浠水县| 法库县| 惠东县| 伊金霍洛旗| 延寿县| 南汇区| 大姚县| 益阳市| 光泽县| 叶城县| 温州市| 西丰县| 桓台县| 景德镇市| 遵化市| 城固县| 通江县| 益阳市| 北票市| 成都市| 铜山县| 萨嘎县| 大丰市| 乃东县| 三河市| 洱源县| 房产| 望奎县| 咸丰县| 名山县| 慈利县| 会同县| 罗江县| 滨州市| 延边| 太康县| 海淀区| 东安县| 西安市|