Blocks實現代理傳值

一、RootViewController:

#import "RootViewController.h"
#import "SecondViewController.h"
@interface RootViewController ()
{
    UILabel *_myLabel;
   
}
@end

@implementation RootViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.title = @"第一頁";
    UIBarButtonItem *item = [[UIBarButtonItem alloc]initWithTitle:@"下一頁" style:UIBarButtonItemStylePlain target:self action:@selector(nextPage)];
    self.navigationItem.rightBarButtonItem = item;
    
    _myLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 100, 320, 50)];
    _myLabel.textAlignment = NSTextAlignmentCenter;
    _myLabel.text = @"Blocks";
    [self.view addSubview:_myLabel];
    // Do any additional setup after loading the view from its nib.
}
-(void)nextPage{
    SecondViewController *second = [[SecondViewController alloc]initWithBlock:^(NSString *str) {
        NSLog(@"%@",str);
        _myLabel.text = str;
    }];
    [self.navigationController pushViewController:second animated:YES];
}
- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

@end


二、SecondViewConroller:

.h文件

#import <UIKit/UIKit.h>
typedef void(^myBlock)(NSString *);

@interface SecondViewController : UIViewController
{
    myBlock block;
}
-(id)initWithBlock:(myBlock)str;
@end

.m文件

#import "SecondViewController.h"

@interface SecondViewController ()

@end

@implementation SecondViewController
-(id)initWithBlock:(myBlock)str{
    self = [super init];
    if(self)
    {
        block = str;
    }
    return self;
}
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
    }
    return self;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    
    UIButton *myButton = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    myButton.frame = CGRectMake(100, 100, 100, 50);
    [myButton setTitle:@"點我傳值!" forState:UIControlStateNormal];
    [myButton addTarget:self action:@selector(clicked) forControlEvents:UIControlEventTouchUpInside];
    [self.view addSubview:myButton];
    
    // Do any additional setup after loading the view from its nib.
}
-(void)clicked{
    NSLog(@"我被點擊了!");
    
    if (block) {
        block(@"哈哈");
    }
    //[self.navigationController popViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章