block做爲蘋果主推的方法,一樣是能夠用來傳值的。app
兩個頁面,第一個頁面有一個label,第二個頁面有一個textField,將第二個頁面輸入的信息,在第一個頁面顯示。atom
按照代碼中的步驟,並附有說明,應該很容易懂了。blog
第二個頁面controller的.h文件(聲明block)事件
#import <UIKit/UIKit.h> #pragma mark - 1.typedef一個block方便後面使用 typedef void(^PassValue)(NSString *text); @interface SecondViewController : UIViewController #pragma mark - 2.聲明一個block屬性(必定要用copy) @property(nonatomic, copy)PassValue passValue; @end
第三步在第一個頁面的controller的.m文件中(給block賦值)it
第一個頁面調到第二個頁面的button的響應事件io
- (void)doTapButton:(UIBarButtonItem *)barButtonItem { SecondViewController *secondVC = [[SecondViewController alloc] init]; #pragma mark - 3.給下一個頁面的block屬性賦值;即將block的參數給本身的UILabel的text用於顯示 secondVC.passValue = ^(NSString *text){ ((UILabel *)self.view.subviews[0]).text = text; }; [self.navigationController pushViewController:secondVC animated:YES]; [secondVC release]; }
第四步,也是最後一步在第二個頁面的.m中(何時執行block)class
#pragma mark - 4.頁面消失的時候執行前一個頁面傳過來的block值 - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; if (self.passValue != nil) { // 將本身頁面的textField的text做爲參數傳過去 self.passValue(((UITextField *)self.view.subviews[0]).text); } }
!!還有一個注意的事件就是block的釋放(蘋果專門爲block提供了釋放方法)import
- (void)dealloc { #warning Block釋放 Block_release(_passValue); [super dealloc]; }