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,991評論 19 139
  • 代理屬于一種設計模式,跟通知相似,內部發生的一些事情可以告訴別人 通知屬于觀察者模式:一直在那盯著,一旦有人發出通...
    RadioWaves閱讀 446評論 0 0
  • 1. Java基礎部分 基礎部分的順序:基本語法,類相關的語法,內部類的語法,繼承相關的語法,異常的語法,線程的語...
    子非魚_t_閱讀 31,778評論 18 399
  • 你要知道的KVC、KVO、Delegate、Notification都在這里 轉載請注明出處 http://www...
    WWWWDotPNG閱讀 2,511評論 0 5
  • “太長不看!”,我們盡量壓縮,只講重點和基礎。 概念 大白話:我寫了一些粗糙的框架功能,給了你一個使用的接口,由你...
    QihuaZhou閱讀 3,903評論 2 7