delegate

一、 确定谁是谁的代理,一般如果需要在 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];
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,952评论 19 139
  • 代理属于一种设计模式,跟通知相似,内部发生的一些事情可以告诉别人 通知属于观察者模式:一直在那盯着,一旦有人发出通...
    RadioWaves阅读 445评论 0 0
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,766评论 18 399
  • 你要知道的KVC、KVO、Delegate、Notification都在这里 转载请注明出处 http://www...
    WWWWDotPNG阅读 2,511评论 0 5
  • “太长不看!”,我们尽量压缩,只讲重点和基础。 概念 大白话:我写了一些粗糙的框架功能,给了你一个使用的接口,由你...
    QihuaZhou阅读 3,893评论 2 7