日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

自定義插件

更新時(shí)間:

如果您需要在某個(gè)時(shí)機(jī)完成某些事件,例如進(jìn)入頁(yè)面時(shí)記錄埋點(diǎn),那么您需要開(kāi)發(fā)一個(gè)插件 (Plugin)。插件訂閱相應(yīng)的事件后,就可以在 handler 中實(shí)現(xiàn)對(duì)事件所攜帶的數(shù)據(jù)進(jìn)行加工處理。

關(guān)于此任務(wù)

自定義插件的過(guò)程分為以下步驟:

  1. 新建 Plugin

  2. 注冊(cè) Plugin

  3. 使用 Plugin

本文將結(jié)合 H5 容器和離線包 Demo,自定義一個(gè)在 H5 頁(yè)面加載時(shí),修改頁(yè)面導(dǎo)航欄的插件。

操作步驟

新建 Plugin

新創(chuàng)建的 Plugin 類(lèi)一般格式的代碼示例如下:

#import <NebulaSDK/NBPluginBase.h>

@interface MPPlugin4TitleView : NBPluginBase

@end

@implementation MPPlugin4TitleView

- (void)pluginDidLoad
{
}

- (void)handleEvent:(PSDEvent *)event
{
   [super handleEvent:event];
}

- (int)priority
{
    return PSDPluginPriority_High +1;
}

需注意以下幾點(diǎn):

  • 命名:為與容器默認(rèn)提供的 Plugin 命名保持一致,統(tǒng)一以 XXPlugin4 開(kāi)頭,其中 XX 為自定義的前綴。

  • 基類(lèi):所有插件均繼承自 NBPluginBase

  • 實(shí)現(xiàn)基礎(chǔ)方法:在 .m 文件中,需重寫(xiě)以下三個(gè)方法:

    • - (void)pluginDidLoad:必選。監(jiān)聽(tīng)的 H5 事件,事件列表請(qǐng)查看頭文件 NBDefines.h。

    • - (void)handleEvent:必選。處理監(jiān)聽(tīng)的事件觸發(fā)后的邏輯。

    • - (``**int**``)``priority:必選。事件的優(yōu)先級(jí),設(shè)置為 PSDPluginPriority_High`` +``1。

    • - (void)addJSApis:可選。因?yàn)橐c H5 通信,可能需要注冊(cè) JSAPI。

監(jiān)聽(tīng)事件

- (void)pluginDidLoad 方法中注冊(cè)需要監(jiān)聽(tīng)的事件。

- (void)pluginDidLoad {
    self.scope = kPSDScope_Scene; // 1

    [self.target addEventListener:kNBEvent_Scene_NavigationItem_Left_Back_Create_After withListener:self useCapture:NO];
    // -- 修改導(dǎo)航欄風(fēng)格
    [self.target addEventListener:kH5Event_Scene_NavigationBar_ChangeColor withListener:self useCapture:NO];

    [super pluginDidLoad];
}

addEventListener 方法用于監(jiān)聽(tīng)某個(gè)事件,各參數(shù)說(shuō)明如下:

名稱(chēng)

含義

scope

設(shè)置事件影響范圍。目前支持的范圍從小到大依次是 Scene、Session 和 Service。

event

設(shè)置事件名稱(chēng),事件常量定義在 NBDefines.h 中。

listener

設(shè)置事件的處理者,即提供 - handleEvent: 的對(duì)象。

capture

設(shè)置是否使用捕捉的方式傳播事件,一般使用 NO。

設(shè)置插件優(yōu)先級(jí)

避免自定義插件被覆蓋,需要設(shè)置插件的高優(yōu)先級(jí)。

- (int)priority
{
    return PSDPluginPriority_High +1;
}

處理監(jiān)聽(tīng)

最后,在 - handleEvent: 中處理監(jiān)聽(tīng)的事件觸發(fā)后的邏輯。

- (void)handleEvent:(NBNavigationTitleViewEvent *)event
{
    [super handleEvent:event];

    if ([kNBEvent_Scene_NavigationItem_Left_Back_Create_After isEqualToString:event.eventType]){
        // 在默認(rèn)返回按鈕基礎(chǔ)上,修改樣式
        NSArray *leftBarButtonItems = event.context.currentViewController.navigationItem.leftBarButtonItems;
        if ([leftBarButtonItems count] == 1) {
            if (leftBarButtonItems[0] && [leftBarButtonItems[0] isKindOfClass:[AUBarButtonItem class]]) {
                // 在默認(rèn)返回按鈕基礎(chǔ)上,修改返回箭頭和文案顏色
                AUBarButtonItem *backItem = leftBarButtonItems[0];
                backItem.backButtonColor = [UIColor greenColor];
                backItem.titleColor = [UIColor colorFromHexString:@"#00ff00"];

                // 隱藏返回箭頭
                //                backItem.hideBackButtonImage = YES;

                // 隱藏返回文案:文案設(shè)置為透明,保留返回按鈕點(diǎn)擊區(qū)域
                //                backItem.titleColor = [UIColor clearColor];
            }
        }
        [event preventDefault];
        [event stopPropagation];
    }else if([kH5Event_Scene_NavigationBar_ChangeColor isEqualToString:event.eventType]) {

        // 禁止容器默認(rèn)導(dǎo)航欄樣式
        [event preventDefault];
        [event stopPropagation];
    }
}

添加 JSAPI

若在注冊(cè) Plugin 的過(guò)程中,需要自定義 JSAPI 與 H5 頁(yè)面進(jìn)行交互,可在 - (void)addJSApis 方法中,使用代碼注冊(cè)(參考 自定義 JSAPI > 代碼注冊(cè))的方式進(jìn)行處理。此方法為可選項(xiàng),若無(wú)需要可不實(shí)現(xiàn)。

- (void)addJSApis
{
    [super addJSApis];
    // 可以在這里添加 TitleView 相關(guān)的自定義 JSAPI
}

注冊(cè) Plugin

創(chuàng)建了 Plugin 類(lèi)后,需要在自定義的 Plist 文件(參見(jiàn) 自定義 JSAPI > 注冊(cè) JSAPI 說(shuō)明)中注冊(cè)此 Plugin。

【修復(fù)版】自定義插件

注冊(cè)的 Plugin 是一個(gè)字典類(lèi)型,包含以下三項(xiàng)內(nèi)容:

名稱(chēng)

含義

name

創(chuàng)建的 Plugin 類(lèi)名

scope

Plugin 生效的范圍

events

監(jiān)聽(tīng)的 event 名稱(chēng)

使用 Plugin

  1. pluginDidLoad 方法中添加斷點(diǎn),觀察觸發(fā)時(shí)機(jī)的堆棧調(diào)用順序是否正確。

    11
  2. handleEvent 方法中添加斷點(diǎn),觀察監(jiān)聽(tīng)的事件能否正確觸發(fā)。

    22
  3. 觀察 H5 頁(yè)面自定義的導(dǎo)航欄樣式是否生效。