delegate

2016-04-02  本文已影响146人  王慕博

一、 确定谁是谁的代理,一般如果需要在 A 中调用 B 的方法,则 B 为 A 的代理

二、 定义协议,在 A 的.h文件 #import xxx@interface xxx之 间

三、 添加代理属性,在 A 的 @interface xxx

#import <UIKit/UIKit.h>

@class MOBTabBar;  // 声明 MOBTabBar 是一个类
@protocol MOBTabBarDelegate <UITabBarDelegate> //正常情况下<>中为NSObject,单当父类也有代理时需要填父类代理
@optional
- (void)tabBarDidClickedPlusButton:(MOBTabBar *)tabBar;
@end

@interface MOBTabBar : UITabBar

@property (nonatomic, weak) id<MOBTabBarDelegate> delegate;

- (void)plusButtonClick;

@end

四、 B 在 .m 文件遵守代理协议,并将 B 赋值为 A 的delegate

// 遵守代理协议
@interface MOBTabBarController () <MOBTabBarDelegate>
// 成为代理
MOBTabBar *myTabBar = [[MOBTabBar alloc] init];
myTabBar.delegate = self;

五、 B 实现代理方法

- (void)tabBarDidClickedPlusButton:(MOBTabBar *)tabBar
{
  NSLog(@"点击了PlusButton" );
 }

六、 A 在 .m 文件中调用代理方法,需要先判断代理方法是有实现

- (void)plusButtonClick
{
    if ([self.delegate respondsToSelector:@selector(tabBarDidClickedPlusButton:)]) {
        [self.delegate tabBarDidClickedPlusButton:self];
    }
}
上一篇下一篇

猜你喜欢

热点阅读