美文网首页
UINavigationBar事件透传

UINavigationBar事件透传

作者: 生命不止运动不息 | 来源:发表于2019-10-04 14:26 被阅读0次

当UINavigationBar透明时,底部的视图,放了按钮时,这时点击按钮是没有效果,因为事件被NavigationBar拦截了。

所以要想 点击navigationBar底部的按钮有效果。有两个办法:
方法一:直接隐藏navigationBar。
方法二:重写UINavigationController和UINavigationBar,透传事件。

重写代码如下(很简单):

.h头文件,啥也没干,就声明个类

@interface DSNaviCtrl : UINavigationController
@end

@interface DSNaviBar : UINavigationBar
@end

.m文件,实现透传,将重写的naviBar替换掉系统的

@implementation DSNaviCtrl

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    [self setValue:[DSNaviBar new] forKey:@"navigationBar"];
}

@end

@implementation DSNaviBar

////让navigationbar上的点击事件,透传下来
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event {
    UIView *view = [super hitTest:point withEvent:event];
    //若点击的是_UINavigationBarContentView ,则透传下去
    if( [view isKindOfClass:NSClassFromString(@"_UINavigationBarContentView")] ){
        return nil;
    }
    return view;
}

@end

相关文章

网友评论

      本文标题:UINavigationBar事件透传

      本文链接:https://www.haomeiwen.com/subject/ewqspctx.html