iOS中使用block传值
转自:http://blog.sina.com.cn/s/blog_60b45f230100yiaf.html
用此方法传值可以替代委托了。具体例子:
#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
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。