IOS-自定义View 覆盖到Tabbar上, View不响应事件问题

自定义View 覆盖到Tabbar上, View不响应事件问题

 

本来想等把所有项目代码都敲个十遍八遍的,再上来写点稍微技术点的东西,但是昨天遇到一个问题, 今天晚上终于解决了.总算能写篇技术文章了.

========

当我们使用TabBarController的时候, 系统自带的TabBar用着不顺手, 我们都会用各种方法自定义一个.

1,有的直接将TabBar隐藏,然后用一个View去覆盖它,在View上添加button. 这种方法缺点就是不能在别的控制器里面 想获取 TabBar一样去随心所欲的获取到它, 比如,在跳转到子控制器的时候, 我们往往需要隐藏底部的"TabBar", 这时候, 需要考虑隐藏你这个所谓的"TabBar"------------自定义的View,  但是这时候, 不好获取.很麻烦.解决方案

2,直接真正的自定义TabBar, 这种方法我还没有研究.

3, 第一种方法的改进版.在storyboard里面把控制器都处理好, 然后再自定义TabBarController, 并自定义一个View去覆盖TabBar.  在TabbarController的loadView方法里面创建自定义的View, 然后添加到TabBar里面.

 

- (void)loadView{
    [super loadView];
    AMTarbar *mTabbar = [[AMTarbar alloc] initWithFram: self.tabBar.bounds];
   [self.tabBar addSubview:mTabbar];
}

这种方法解决了第一种方法无法轻松的获取到自定义的View问题,  因为我们直接将View添加到了TabBar里面, 成为了TabBar的子控件,所以就很方便操作了.

但是这种方法只适用于从storyboard里面加载控件时候才行, 不然会出现View上的button按钮无法响应事件..

4, 解决第三种方法,不能在纯代码下实现View响应的问题...

这个问题我百度了一堆, 也没搞明白,  我捋了下事件响应的机制,TabBar本身生成的按钮能响应 但是我确确实实点击的是View上面的按钮..所以我怀疑是这个View压根没添加进去(代码模式下). 因为tabbarcontroller的生成上就有特殊性, 他不是线性顺序生成的. 因为他需要根据其他控制器 去生成tabbar上面的按钮.

我打印了下tabbar.subviews, 果然里面根本没有我们自己添加的View, 那也就是说, 当我们在代码模式下, 它的代码执行并不是我们相像的那么简单..知道了问题所在,也就解决了,我们不管他中间干了啥, 我在最后面时候,把View添加到tabbar上就行了.

解决方案

- (void)viewWillAppear:(BOOL)animated{
  
    AMTarbar *mTabbar = [[AMTarbar alloc] initWithFram: self.tabBar.bounds];
   [self.tabBar addSubview:mTabbar];

}


把LoadView里面的代码拿出来, 放到这个方法里面, 就是在View将要显示的时候, 我再去添加View..测试成功!

 

 

 

 

 

你可能感兴趣的:(IOS,学习笔记,View覆盖,遮挡Tabbar,IOS,View不响应,Tabbar不响应)