ios页面之间的传值是很常用的,常用的方法有这几种:delegate、block。
下面就以 viewController和nextViewController之间的传值为例,过程是这样的:
1、viewController pushViewController到nextViewController。
2、nextViewController再popViewControllerAnimated回到viewController,同时将
nextViewController的输入(用户名)回传给viewController。
一、delegate(代理)
1、在NextViewController实现代理方法:
这是用的比较普遍也是比较早的,需要声明一个代理:
//NextViewController.h
@protocol NextViewControllerDelegate <NSObject>
- (void) passUserName: (NSString *)name;
@end
@interface NextViewController :UIViewController
@property (nonatomic,weak)id<NextViewControllerDelegate> delegate;
@end
//NextViewController.m
....
在退出页面时调用
- (void) handlePopController {
if (self.delegate && [self.delegaterespondsToSelector:@selector(passUserName:)]) {
[self.delegatepassUserName:@"wqm"];
}
}
2、在viewController中实现代理方法
//在进入NextViewController页面时调用handlPushViewController
- (void)handlPushViewController {
NextViewController *nextVC = [[NextViewControlleralloc]init];
nextVC.delegate =self;
[self.navigationControllerpushViewController:nextVCanimated:YES];
}
#pragma mark NextViewControllerDelegate
- (void)passUserName:(NSString *)name {
NSLog(@"His name is %@", name);
}
二、block实现:
1、NextViewController定义一个block的成员变量
//NextViewController.h
@interface NextViewController :UIViewController
@property (nonatomic,copy)void (^passName) (NSString *name);
@end
//NextViewController.m
- (void) handlePopController {
self.passName(@"wqm");
}
2、ViewController给block赋值
//ViewController.m
//在进入NextViewController页面时调用handlPushViewController- (void)handlPushViewController {
NextViewController *nextVC = [[NextViewControlleralloc]init];
nextVC.passName = ^(NSString *name) {
NSLog(@"His name is %@", name);
};
[self.navigationControllerpushViewController:nextVCanimated:YES];
}