1. 程式人生 > >iOS使用block從後往前傳值

iOS使用block從後往前傳值

①在後面控制器的 .h檔案 中宣告block

// 一會要傳的值為NSString型別

typedef void (^newBlock)(NSString *);

@interface NewViewController : UIViewController

// 宣告block屬性

@property (nonatomic, copy) newBlock block;

// 宣告block方法

- (void)text:(newBlock)block;

@end

②在後面控制器的 .m檔案 中設定block

// 設定block,設定要傳的值

- (void)text:(newBlock

)block

{

    self.block = block;

}

- (void)viewWillDisappear:(BOOL)animated

{

    [superviewWillDisappear:YES];

    if (self.block != nil) {

        self.block(@"呵呵");

    }

}

③在前面控制器的 .m檔案 中接收傳來的值

#import "ViewController.h"

#import "NewViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {

    [superviewDidLoad];

UIButton *button = [UIButtonbuttonWithType:(UIButtonTypeRoundedRect)];

    button.frame = CGRectMake(0, 100, 100, 100);

    button.backgroundColor = [UIColorredColor];

    [button addTarget:selfaction:@selector(push) forControlEvents:(

UIControlEventTouchUpInside)];

    [self.view addSubview:button];

}

- (void)push

{

NewViewController *newVC = [[NewViewControlleralloc] init];

// 接收block傳來的值

    newVC.block = ^(NSString *str){

        NSLog(@"%@", str);

    };

    [self.navigationControllerpushViewController:newVC animated:YES];

}

- (void)didReceiveMemoryWarning {

    [superdidReceiveMemoryWarning];

// Dispose of any resources that can be recreated.

}

@end

④最終實現效果:在控制檯打印出了"呵呵"

    到此,block完成傳值