国产探花免费观看_亚洲丰满少妇自慰呻吟_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跳進實現它要執行代碼的'地方'執行代碼.傳值完成

總結

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 黔江区| 津市市| 游戏| 大荔县| 永嘉县| 沙坪坝区| 抚州市| 南平市| 塔城市| 松溪县| 衡阳市| 纳雍县| 洛浦县| 原平市| 仲巴县| 鲁甸县| 巧家县| 鸡东县| 禄劝| 九龙县| 罗山县| 山阳县| 竹溪县| 连城县| 昭平县| 玉树县| 乌拉特后旗| 新乐市| 上思县| 新乡县| 都昌县| 彩票| 温泉县| 黔西县| 石家庄市| 锡林郭勒盟| 鹤庆县| 林西县| 搜索| 稻城县| 枣庄市|