iOS 自訂索引標籤控制項(TabBar)的製作思路

來源:互聯網
上載者:User

其實 一般我在部落格 針對控制項這一塊來說,是很少進行解說.

不過主要 TabBar 相對於其他控制項的重要性要多得多,製作方面也要複雜一些.

為此,我專門寫一篇教程,記錄一下原理和思路.以供各路神仙參考!

OK,進入本文:

iOS 5以後 其實製作這類控制項簡單多了,  不需要自己去組織各個View 之間的切換.

第一點,原理:

TabBar它講白了 也是View,只是在一個View上面暫時只顯示一個View 根據使用者選按決定顯示哪個View

iOS5以後提供在ViewController內部直接填裝其他子ViewController,代碼如下:

[self addChildViewController:viewController];

這樣寫的好處是什麼,為什麼iOS5以後要這樣添加呢? 參考下文,你就知道為什麼:

http://blog.devtang.com/blog/2012/02/06/new-methods-in-uiviewcontroller-of-ios5/

那麼針對系統下的UITabBarViewController 如何進行自訂呢?

預設的TabBarView高度是49 這裡注意,不要嘗試去修改這個高度以來展現更多的[內容] 檢視,總之這樣怎麼弄都弄不到你想要的效果.

原理方面是 將UITabBar 隱藏.  那麼在 添加一個 自訂的UIView 到 UITabBarViewControllerView上面

這樣這個UIView 就隨便你什麼開發了.

另外值得一提的是,當你Push到下一個視圖時,你想隱藏你自己自訂的視圖. 此時糾結了.

那麼在我自己經過無數次嘗試以後,得帶以下代碼,配合系統預設的 hidesBottomBarWhenPushed  也算是實現了.

原理則是,預設addSubView 到 根視圖中,當要切換Push到新的視圖的時候.再把自訂視圖 addSubView到TabBarView上面. 連帶著一起過去.

一:聲明這個變數在第一次載入介面時不會有錯亂的動畫出現

@interface FESBHomeViewController (){    BOOL _isFirstShowCoopTabBar;}

二:在TabBarViewController 執行ViewDidLoad時  顯示出自訂選項卡視圖

- (void)viewDidLoad{    [super viewDidLoad];    _isFirstShowCoopTabBar = YES;    [self isHiddenTabBar:NO withViewController:nil];}

三:核心切換自訂選項卡視圖的代碼

- (void)isHiddenTabBar:(BOOL)hidden withViewController:(UIViewController *)viewController{    if (!self.tabBar.hidden == hidden) {        return;    }    [coopTabBarView removeFromSuperview];    if (hidden) {        [self.tabBar setHidden:NO];        [coopTabBarView setFrame:self.tabBar.bounds];        [self.tabBar addSubview:coopTabBarView];        if (viewController != nil) {            viewController.hidesBottomBarWhenPushed = YES;        }    }else    {        [self.tabBar setHidden:YES];        [coopTabBarView setFrame:self.tabBar.frame];        int statusBarHeight = 0;        if (_isFirstShowCoopTabBar) {            _isFirstShowCoopTabBar = NO;            statusBarHeight = 20;        }        if (self.navigationController.viewControllers == nil) {            coopTabBarView.Help_top -=statusBarHeight;        }else        {            coopTabBarView.Help_top -=statusBarHeight+44;        }        [self.view addSubview:coopTabBarView];    }}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.