delegate

作者: 王慕博 | 来源:发表于2016-04-02 03:26 被阅读146次

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

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

    • @class 声明 A 是一个类
    • @protocol声明协议,格式协议名带前缀的类名开头,例如: XBAppViewDelegate
    • 代理方法前要声明@optional表示方法可不实现
    • 代理方法名以去掉前缀的类名开头,例如:appViewDidClickDownloadButton
    • 代理方法中已经或即将发生的使用 didwill,判断使用should
    • 代理方法中需要将当前对象一同传入

    三、 添加代理属性,在 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];
        }
    }
    

    相关文章

      网友评论

          本文标题:delegate

          本文链接:https://www.haomeiwen.com/subject/ogbylttx.html