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