代理的步骤:
1.定义协议方法
@protocol SecondViewControllerDelegate
-(void)changeFirstViewControllerLabel:(NSString*)string;
@end
2.把代理设置成secondViewController的一个属性。
@property(nonatomic,assign)id delegate;
3.
[self.delegate changeFirstViewControllerLabel:tf.text];
4.遵从协议
#import"SecondViewController.h"
@interfaceFirstViewController :UIViewController
svc.delegate=self;
5.调用协议方法-(void)changeFirstViewControllerLabel:(NSString*)string
{
label.text= string;
}
//代理本质是实现了对象的相互调用
//导航控制器中上级界面向下级界面传值,可以叫做正向传值
//最常用的策略,下级界面定义相应的属性来接收上级界面传递过来的值
//iOS7 之前(传值操作写在push 之后,是无法实现传值的)
//传值
//第一次调用视图控制器的view属性会触发loadView和viewDidLoad
//声明一个协议 (协议本质上是多个类共享的方法列表,只有方法的声明没有实现)
@protocol SendValue
//@required(必须实现的方法)
- (void)sendTitle:(NSString *)title;
//@optional 可选实现的方法
@end
//判断_delegate中是否支持sendTitle:方法
if ([_delegate respondsToSelector:@selector(sendTitle:)]) {
//为了增强代码的安全性(健壮性)
[_delegate sendTitle:btn.currentTitle];
}
想要检查某个类是否实现了某个协议或者某个类是否实现了某个协议的方法,可以通过以下方式来进行测试
//获取某个对象
MyClassView *myClassView = xxxxxxx;
//判断该对象是否实现了MyChooseDayViewDelegate协议
if([myClassView conformToProtocol:@protocol (MyChooseDayViewDelegate)]){
//TODO: balabalabala...
}