Weex开发技巧weex社区

实现Weex在iOS上的HUD扩展

2017-12-06  本文已影响83人  KChuck

Weex SDK给实现了toast,即提示语。但是没有hud转圈来提示加载中的状态。下面简单实现一个hud的扩展。Weex官网也提供了增加扩展的方法,地址http://weex.apache.org/cn/references/advanced/extend-to-ios.html。在Xcode工程中,新建WXHudModule类,继承WXModuleProtocol。

//hud扩展

@interface WXHudModule : NSObject<WXModuleProtocol>

@end

在WXHudModule.m中,定义hud的显示(show)和隐藏(hide)方法,并加宏WX_EXPORT_METHOD, 它可以被weex识别,添加@synthesized weexInstance,每个moudle对象被绑定到一个指定的实例上。

#import "WXHudModule.h"
#import "KTools.h"

@implementation WXHudModule

@synthesize weexInstance;

WX_EXPORT_METHOD(@selector(show))
WX_EXPORT_METHOD(@selector(hide))


/*
显示hud
 */
- (void)show
{
    [KTools showhud:YES];
}

/*
 隐藏hud
 */
-(void)hide
{
    [KTools showhud:NO];
}

@end
#import "KTools.h"
@implementation KTools

+(void)showmsg:(NSString*)msg
{
    [MBManager showBriefAlert:msg];
}

+(void)showhud:(BOOL)flag
{
    if(flag)
    {
        [MBManager showLoading];
    }
    else
    {
        [MBManager hideAlert];
    }
}
@end

最后在WXSDKEngine.m中注册这个module

[self registerModule:@"hud" withClass:NSClassFromString(@"WXHudModule")];

@"hud"就是可以在weex的js工程中可以引用的模块名。

WXSDKEngine.m中的_registerDefaultModules类方法(如下)。注册的都是扩展模块,比如navigator、storage等。withClass:中的类名,就是其扩展实现的类。

+ (void)_registerDefaultModules
{
    [self registerModule:@"dom" withClass:NSClassFromString(@"WXDomModule")];
    [self registerModule:@"navigator" withClass:NSClassFromString(@"WXNavigatorModule")];
    [self registerModule:@"stream" withClass:NSClassFromString(@"WXStreamModule")];
    [self registerModule:@"animation" withClass:NSClassFromString(@"WXAnimationModule")];
    [self registerModule:@"modal" withClass:NSClassFromString(@"WXModalUIModule")];
    [self registerModule:@"webview" withClass:NSClassFromString(@"WXWebViewModule")];
    [self registerModule:@"instanceWrap" withClass:NSClassFromString(@"WXInstanceWrap")];
    [self registerModule:@"timer" withClass:NSClassFromString(@"WXTimerModule")];
    [self registerModule:@"storage" withClass:NSClassFromString(@"WXStorageModule")];
    [self registerModule:@"clipboard" withClass:NSClassFromString(@"WXClipboardModule")];
    [self registerModule:@"globalEvent" withClass:NSClassFromString(@"WXGlobalEventModule")];
    [self registerModule:@"canvas" withClass:NSClassFromString(@"WXCanvasModule")];
    [self registerModule:@"picker" withClass:NSClassFromString(@"WXPickerModule")];
    [self registerModule:@"meta" withClass:NSClassFromString(@"WXMetaModule")];
    [self registerModule:@"webSocket" withClass:NSClassFromString(@"WXWebSocketModule")];
    [self registerModule:@"voice-over" withClass:NSClassFromString(@"WXVoiceOverModule")];
    [self registerModule:@"hud" withClass:NSClassFromString(@"WXHudModule")];
}

使用:

在weex的js工程中,写一个div按钮,点击显示hud。

const hud = weex.requireModule('hud');//引用hud模块
                hud.show();//显示hud
                //hud.hide();//隐藏hud
上一篇下一篇

猜你喜欢

热点阅读