OC中使用代理
委托方(子控制器)委托方需要实现创建协议 、声明协议方法
@protocol SubViewDelegate<NSObject>
- (void)replaceRealization;
@end
创建一个代理属性
weak声明
@property (nonatomic, weak) id<SubViewDelegate> delegate;
执行协议方法
判断代理是实现该方法,避免carsh
if ([self.delegate respondsToSelector:@selector(replaceRealization)]) {
[self.delegate replaceRealization;];
}
代理方(主控制器)代理方需要实现遵守(继承)协议?
@interface ViewController ()
将代理设为自己
subVC.delegate = self;
实现代理方法
- (void)replaceRealization{
NSLog(@"replaceTheMethod");
}
Swift3.0 中代理的使用方法
委托方(子控制器)委托方需要实现创建协议 、声明协议方法
1.子页面制定协议(不写NSObjectProtocol暂时不会报错,但是写属性是无法写weak)
protocol SubViewDelegate:NSObjectProtocol {
//设置协议方法
func replaceRealization();
}
//在Swift中,制定协议需要遵守NSObjectProtocol协议,除了类可以遵守协议,结构体也可以遵守协议
//在OC中我们制定协议,通常继承自NSObject,可以这样理解,所有继承自NSObject的对象都可以实现协议方法(同样我们也可以指定哪些对象可以实现我们制定的协议方法)
2.用weak定义代理
weak var delegate:SubViewDelegate?
3.判断代理是否存在,让代理去执行方法
//'?'代替了responsed
delegate?.replaceRealization()
二,在控制器界面
1.遵守协议
class ViewController:UIViewController,SubViewDelegate { //遵守协议
2.设置代理为self
subVC?.delegate = self
3.实现协议方法
func replaceRealization(){
print("replaceTheMethod")
}