你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS通過block在兩個頁面間傳值的方法

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

編輯:IOS開發綜合

一、功能需求

在第一個頁面中有一個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跳進實現它要執行代碼的'地方'執行代碼.傳值完成

總結

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

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved