1. 程式人生 > >IOS-自定義View 覆蓋到Tabbar上, View不響應事件問題

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..測試成功!