iOS中使用block传值

转自:http://blog.sina.com.cn/s/blog_60b45f230100yiaf.html

用此方法传值可以替代委托了。具体例子:

MainView.h
#import <UIKit/UIKit.h>

@interface MainView : UIViewController
{
    IBOutlet UIButton* btn;
    IBOutlet UILabel* labShow;
}
-(IBAction)push:(id)sender;
@end

 

MainView.m

#import "MainView.h"
#import "SecondView.h"

@implementation MainView

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
    }
    return self;
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
}
-(IBAction)push:(id)sender
{
    SecondView *s = [[SecondView alloc] initwithBlock:^(NSString *str){
        NSLog(@"%@",str);
        labShow.text = str;
    }];
    [self.navigationController pushViewController:s  animated:YES];
    [s release];
}
- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

 

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

@interface SecondView : UIViewController
{
    IBOutlet UITextField* txtView;
    MyBlock my;
}
-(IBAction)back:(id)sender;
-(id)initwithBlock:(MyBlock)str;
@end

 

SecondView.m
#import "SecondView.h"

@implementation SecondView

-(id)initwithBlock:(MyBlock)str
{
    self = [super init];
    if(self)
    {   
        my = str;
    }
    return self;
}
-(IBAction)back:(id)sender
{
    NSString* s = txtView.text;
    if(my)
    {
        my(s);
    }
    [self.navigationController popViewControllerAnimated:YES];
}

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
}
-(void)dealloc{
    Block_release(my);
    [super dealloc];
    
}
#pragma mark - View lifecycle

- (void)viewDidLoad
{
    [super viewDidLoad];
}

- (void)viewDidUnload
{
    [super viewDidUnload];
}

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return (interfaceOrientation == UIInterfaceOrientationPortrait);
}

@end

 

界面:




iOS中使用block传值,,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。