当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
网友评论