方式一、代理
1、需要在控制器 Two 制定一套协议。
2、在控制器 Two 声明一个遵守协议的代理对象。
3、在 Two 中 **恰当** 的地方 **使用代理对象调用代理方法**。
4、在 One 中遵守协议、设置代理对象、实现代理方法。
第1、2步
#import <UIKit/UIKit.h>
@class TwoViewController;
// 制订协议
@protocol TwoViewControllerDelegate<NSObject>
@optional
- (void)twoViewController:(TwoViewController *)twoVC sendValue:(NSString *)strValue;
@end
@interface TwoViewController : UIViewController
/** 代理对象(任意遵守 TwoViewControllerDelegate 的对象) */
@property (weak, nonatomic) id<TwoViewControllerDelegate> delegate;
@end
第3步
#import "TwoViewController.h"
@interface TwoViewController ()
@property (weak, nonatomic) IBOutlet UITextField *twoTextF;
@end
@implementation TwoViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.navigationItem.title = @"TwoVC";
// 自定义返回按钮(为了监听返回事件)
UIButton *backBtn = [[UIButton alloc] init];
backBtn.frame = CGRectMake(0, 0, 50, 50);
[backBtn setTitle:@"返回" forState:UIControlStateNormal];
[backBtn setTitleColor:[UIColor blueColor] forState:UIControlStateNormal];
[backBtn addTarget:self action:@selector(navBack:) forControlEvents:UIControlEventTouchUpInside];
self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backBtn];
}
- (void)navBack:(UIButton *)backBtn
{
/** 使用代理对象调用代理方法
1、判断代理对象是否实现代理方法
2、使用代理对象调用代理方法(传值)
*/
if ([self.delegate respondsToSelector:@selector(twoViewController:sendValue:)]) {
[self.delegate twoViewController:self sendValue:@"I'm from twoVC"];
}
[self.navigationController popViewControllerAnimated:YES];
}
@end










