标签:
代理的一般设计步骤:(假设控件名为: CJTabBar )
1、创建一个代理的协议,协议名称为:控件名+Delegate : CJTableDelegate (由于要多个文件共享,所以得创建在.h,中)
2、定义代理方法(在CJTabBar.h 中)
1.一般都定义为@optional
2.代理方法名都以控件名开头
3.代理方法至少有一个参数,将本控件传递出去
3、设置代理对象(在需要监听的控制器中实现)()
1.遵守协议 <CJTableDelegate>
3.在需要监听出,实现例如 : myTabBar.delegate=self;
2.在代理对象实现协议里面的方法
实例理解:
例如:在一个 自定义 tabBarView 中发生了按钮的点击事件,在 viewController 中需要得到这个点击事件:
1、在CJTabBar.h 中实现如下:
@class CJTabBar; // 由于用到 CJTabBar ,则需要 @class 一下
@protocol CJTabBarDelegate <NSObject> // 创建一个协议
@optional
// 规范:以类名开头
- (void)tabBar:(CJTabBar *)tabBar didSelectButtonFrom:(NSInteger)from to:(NSInteger)to;
@end
@interface CJTabBar : UIView
@property(nonatomic,weak) id <CJTabBarDelegate> delegate; // 创建一个别人可以使用的代理控件
@end
2、然后实现事件的监听,并且通知代理
/**
* 监听按钮点击
*
* @param button
*/
- (void)buttonClick:(CJButton *)button
{
// 通知代理
if ([self.delegate respondsToSelector:@selector(tabBar:didSelectButtonFrom:to:)]) { // 注意:所有的代理实现之前都必须调用此方法,用于判断代理是否存在,因为定义了代理为@optonal,有可能没有实现,只有代理方法有实现了才能去实现代理的通知
[self.delegate tabBar:self didSelectButtonFrom:self.buttonSelected.tag to:button.tag];
}
}
3、在需要实现代理的地方监听代理
1.得先遵守代理协议
@interface CJTabBerController() <CJTabBarDelegate>
@end
2.实现代理的监听
// 添加自己的 tabber
CJTabBar *myTabBar= [[CJTabBar alloc] init];
myTabBar.delegate = self;
3.监听完之后,拿到代理的方法,实现得到代理需要执行的事情
#pragma mark CJTabBar 代理方法
- (void)tabBar:(CJTabBar *)tabBar didSelectButtonFrom:(NSInteger)from to:(NSInteger)to
{
// 选中最新的控制器
self.selectedIndex = to;
}
标签:
原文地址:http://www.cnblogs.com/cjt5132/p/4628732.html