weex navigator item 单击事件

官方文档中没有描述,是从看sdk源码得知的方法。

  • WXNavigatorModule.m
    对外开放的有setNavBarRightItem:callback: 方法。 跟随着源码,找到了WXNavigationDefaultImpl.m 中提供的
- (UIView *)barButton:(NSDictionary *)param position:(WXNavigationItemPosition)position
        withContainer:(UIViewController *)container {
  ... 
  ...
 [button addTarget:self action:@selector(onClickBarButton:) forControlEvents:UIControlEventTouchUpInside];

  ...
}
  • WXNavigationDefaultImpl.m

此文件中有onClickBarButton 函数的实现

- (void)onClickBarButton:(id)sender {
 WXBarButton *button = (WXBarButton *)sender;
    if (button.instanceId) {
        if (button.nodeRef)
        {
            [[WXSDKManager bridgeMgr] fireEvent:button.instanceId ref:button.nodeRef type:@"click" params:nil domChanges:nil] ;
        }
        else
        {
            NSString *eventType;
            switch (button.position) {
                case WXNavigationItemPositionLeft:
                    eventType = @"clickleftitem";
                    break;
                case WXNavigationItemPositionRight:
                    eventType = @"clickrightitem";
                    break;
                case WXNavigationItemPositionMore:
                    eventType = @"clickmoreitem";
                    break;
                default:
                    break;
            }
            
           [[WXSDKManager bridgeMgr] fireEvent:button.instanceId ref:WX_SDK_ROOT_REF type:eventType params:nil domChanges:nil];
        }
    }
}

从源码中可以看出,最终navive端(fireEvent)发送了一个消息到js,而且这个消息需要在根元素中进行扑获,如:

<template>
    <div class="wrapper" @clickrightitem="onRightItemClick">
       
    </div>
    
</template>

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 164,042评论 24 696
  • 人来人往,无心风月, 至此流年各天涯。 城南花开,望君无恙, 至此南郭不回首。 且回,且去,且曰君, 本是俗人,见...
    苍某人会写诗阅读 79评论 0 0
  • 有些人、有些事,不知不觉就被大脑深埋。 突然,有一天某件事或某个人不经意被提起,我们才会长长惊叹一声"哦,原来还有...
    荷塘花开阅读 221评论 2 11
  • 阅读可以增见识长学问,拓展思路,改变思维习惯,消除寂寞,净化心灵、修身养性、宁静心灵。 阅读虽说不...
    宁静致远李丽阅读 280评论 0 2