block傳值

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];
}
相關文章
相關標籤/搜索