从子视图向父视图回传值,通常有以下三种方法
{
1、Delegate(代理)
2、Notification(通知)
3、Blocks(块)
}
以FirstViewController和SecondViewController作为例子,SecondViewController是FirstViewController的子视图
1、Delegate
/*
* SecondViewController.h
*/
#import <UIKit/UIKit.h>
//定义协议(即 使用了这个协议后,就需按照这个协议规定的内容在执行)
@protocal SecondViewControllerDelegate <NSObject>
- (void)passDataBack: (NSString *)data;
@end
@interface SecondViewController : UIViewController <SecondViewControllerDelegate>
@property (nonatomic, weak) id <SecondViewControllerDelegate> delegate;
@end
/*
* SecondViewController.m
*/
//为了省略篇幅,只贴出必要的代码
- (IBAction)back:(id)sender{
[self.delegate passDataBack:@"pass data back"];
[self.desmissViewControllerAnimated:YES completion:nil];
}
/*
* FirstViewController.h
*/
#import <UIKit/UIKit.h>
#import <SecondViewController.h>
//FirstViewController遵循SecondViewControllerDelegate协议
@interface FirstViewController : UIViewController <SecondViewControllerDelegate>
@end
/*
* FirstViewController.m
*/
- (IBAction)open:(id)sender{
SecondViewController *secondViewController = [[SecondViewController alloc] init];
secondViewController.delegate = self;
[self presentViewController:secondViewController completion:nil];
}
//在这里要补充好协议中passDataBack的方法
- (void)passDataBack: (NSString *)data{
NSLog(@"Passing data is %@", data);
}
2、Notification
补充ing。。