最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器使用進(jìn)階

 更新時(shí)間:2016年03月12日 09:25:58   作者:nova_lin  
這篇文章主要介紹了iOS應(yīng)用開發(fā)中UITabBarController標(biāo)簽欄控制器的使用進(jìn)階,實(shí)例代碼為傳統(tǒng)的Objective-C,需要的朋友可以參考下

做了這么長(zhǎng)時(shí)間的ios開發(fā)了,最基本的UITabBarController和UINavigationController都用了好長(zhǎng)時(shí)間了,總是改現(xiàn)成的代碼,或者各種自定義控件的修改,用的都有些混亂了,呵呵。還是自己做個(gè)demo再?gòu)?fù)習(xí)一下吧,記錄下來(lái)以備后續(xù)翻查。
一、UITabBarController和UINavigationController的聯(lián)合使用

這種方法最常見,好像一般有tabbar都會(huì)有naviBar。一般使用,

1. 在appDelegate里面創(chuàng)建UITabBarController; 準(zhǔn)備好ViewControllerArray等其它數(shù)據(jù)變量;
[/code]
UITabBarController *tabBarController = [[UITabBarController alloc] init]; 
    tabBarController.delegate = nil;

UINavigationController *naviController = nil; 
    NSMutableArray *controllerArray = [[NSMutableArray alloc] initWithCapacity:3];
[/code]

2.創(chuàng)建每個(gè)tab對(duì)應(yīng)的viewController和以該viewController為根視圖控制器的UINavigationController; 將naviController添加到數(shù)組中; 定制每個(gè)UITabBarItem,可以設(shè)置圖片、文字、標(biāo)記等;

如下:tab1和tab3的創(chuàng)建類似 

復(fù)制代碼 代碼如下:

SecondTabViewController *secondController = [[SecondTabViewController alloc] initWithStyle:UITableViewStylePlain]; 
    naviController = [[UINavigationController alloc] initWithRootViewController:secondController]; 
    //    UITabBarItem *secondTab = [[UITabBarItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"tab2.png"] tag:2]; 
    UITabBarItem *secondTab = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:2]; 
    naviController.tabBarItem = secondTab; 
    secondController.navigationItem.title = @"second tab"; 
    [secondTab release]; 
    [controllerArray addObject:naviController]; 
    [naviController release]; 
    [secondController release];</span> 

3. 將viewController數(shù)組設(shè)置給tabBarController,tabBarController添加到窗口顯示。

復(fù)制代碼 代碼如下:

tabBarController.viewControllers = controllerArray; 
    [controllerArray release]; 
     
    [self.window addSubview:tabBarController.view];

完成,顯示效果如下。

201631292645938.gif (336×506)

4. UITabBarController和naviController不是一定綁定在一起用的。

復(fù)制代碼 代碼如下:

naviController.tabBarItem = secondTab;

 從上面這句話就可以看出來(lái),我理解這句才是將tab和viewController連接起來(lái)的關(guān)鍵,但是每個(gè)UIViewController本身都會(huì)自動(dòng)創(chuàng)建一個(gè)tabBarItem,因此secondController.tabBarItem = secondTab也是可以的,這就可以實(shí)現(xiàn)只有UITabBarController,而沒有naviController。如下圖所示

201631292706814.gif (329×506)

UITabBarController.h中的相關(guān)定義,可以驗(yàn)證這種用法。

復(fù)制代碼 代碼如下:

@interface UIViewController (UITabBarControllerItem) 
 
@property(nonatomic,retain) UITabBarItem *tabBarItem; // Automatically created lazily with the view controller's title if it's not set explicitly. 

二、UITabBar和UITabBarItem的一些設(shè)置。

  設(shè)置UITabBar的背景,網(wǎng)上流傳最多的方法是取出UITabBar之后,對(duì)其layer層的contents屬性進(jìn)行修改,將其設(shè)置為自定義的一張背景圖片,如下面注視掉的代碼。不過(guò)看了頭文件之后我覺得這種方法好像挺奇怪的,雖然也沒幾句代碼,不過(guò)感覺不用這么復(fù)雜吧??取出UITabBar之后直接設(shè)置backgroundImage不就行了么?或許有潛在問(wèn)題我不知道吧,先了解有這種方法吧,以備不時(shí)之需。

復(fù)制代碼 代碼如下:

UITabBar *tabBar = (UITabBar*)[[tabBarController.view subviews] objectAtIndex:1]; 
    //tabBar.layer.contents = (id)[UIImage imageNamed:@"tabbar_background.png"].CGImage; 
    tabBar.backgroundImage = [UIImage imageNamed:@"tabbar_background.png"];


UITabBarItem有兩種初始化方式,本代碼中使用的是設(shè)置系統(tǒng)tab類型,另一種更常用的應(yīng)該是定制tab標(biāo)題和圖片,如上注釋掉的語(yǔ)句。

復(fù)制代碼 代碼如下:

//UITabBarItem *secondTab = [[UITabBarItem alloc] initWithTitle:nil image:[UIImage imageNamed:@"tab2.png"] tag:2]; 
    UITabBarItem *secondTab = [[UITabBarItem alloc] initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:2];

可以通過(guò)下面的函數(shù)設(shè)置選中、未選中的圖片; 字符串badgeValue是可以在tab右上角的紅色小圓圈內(nèi)的文字內(nèi)容
復(fù)制代碼 代碼如下:

<span style="font-size:16px;">    [firstTab setFinishedSelectedImage:[UIImage imageNamed:@"tab1_selected.png"] withFinishedUnselectedImage:[UIImage imageNamed:@"tab1.png"]]; 
    firstTab.badgeValue = @"3";

201631292725543.gif (323×55)

這幾個(gè)控件的屬性不多,還有可以UITabBar選中的圖片、顏色等等,通過(guò)頭文件注釋看到的,沒有實(shí)際使用,大概使用方法都差不多。


三、自定義UITabBar

實(shí)際工作中,還是用純粹的自定義TabBar的情況更多,在此先寫寫思路,整理好代碼再來(lái)記錄。

第一種思路,也是我現(xiàn)在使用的,自定義TabBar繼承UIView,每個(gè)tab是一個(gè)button,從而可以設(shè)置選中/未選中的圖片,將button都添加到TabBar里面,button的點(diǎn)擊事件就可以作為tab是否被選中的觸發(fā)事件,通過(guò)delegate通知外面到底選中了哪個(gè)tab。

第二種思路,既然UITabBar本身就是UIView的子類,應(yīng)該可以重寫drawRect函數(shù)完全自繪吧,這也是一種思路,好像一些開源代碼也是這樣做的。


還有一些情況,可能使用UIToolBar來(lái)代替TabBar更合適,toolBar可以設(shè)置自定義的view,那就好辦了,估計(jì)搞個(gè)UIActivityIndicatorView之類的設(shè)置上去都行,下一步要看看這塊的文檔和代碼,嘗試一下,寫了demo再來(lái)記錄。


四、總結(jié)UITabBarController的注意點(diǎn)
使用UITabBarController和使用一般的控制器一樣,比如可以設(shè)置

復(fù)制代碼 代碼如下:

self.window.rootViewController = tabBarController;

使用addChildViewController方法可以給其添加子控制器。每個(gè)子控制器對(duì)應(yīng)一個(gè)UITabBarButton,也就是在UITabBarController下面的選項(xiàng)。此時(shí)如果想要改變UITabBarButton的內(nèi)容,比如想要設(shè)置title, image等內(nèi)容,需要在其對(duì)應(yīng)的子控制器里面通過(guò)修改tabBarItem的屬性來(lái)設(shè)置內(nèi)容。
復(fù)制代碼 代碼如下:

// JYViewController.m -> 是UITabBarController的子控制器
- (void)viewDidLoad
{
    [super viewDidLoad];

      self.tabBarItem.title = @"選項(xiàng)1";
      self.tabBarItem.badgeValue = @"1";
}


這一點(diǎn)和UINavigationController是類似的,在使用UINavigationController的時(shí)候,我們?cè)诋?dāng)前顯示的控制器(也就是棧頂?shù)目刂破鳎┲型ㄟ^(guò)修改navigationItem來(lái)設(shè)置導(dǎo)航欄中的內(nèi)容。
self.navigationItem.leftBarButtonItem = ...;
也就是說(shuō),使用UINavigationController和UITabBarController的時(shí)候:
在其對(duì)應(yīng)的控制器里面修改導(dǎo)航欄和tabBar的內(nèi)容。
通過(guò)修改tabBarItem和__navigationItem__的屬性來(lái)設(shè)置導(dǎo)航欄和tabBar的內(nèi)容。其實(shí)tabBarItem和navigationItem屬于模型(從NSObject繼承,以...Item結(jié)尾的可以都推測(cè)為模型?),此時(shí)我們通過(guò)修改模型來(lái)修改view中顯示的內(nèi)容。
當(dāng)UINavigationController和UITabBarController同時(shí)使用的時(shí)候,如果讓navigationController作為self.window.rootViewController,然后再讓tabBarController成為navigationController的子控制器,這么做是合法的,但是會(huì)有一些問(wèn)題。
因?yàn)榍懊嬲f(shuō)過(guò),navigationBar上顯示的內(nèi)容是通過(guò)在其當(dāng)前顯示的子控制器中修改的,但是此時(shí)navigationController直接顯示的子控制器是tabBarController,所以當(dāng)進(jìn)入不同的界面的時(shí)候,我們希望navigationBar上的內(nèi)容(比如title)改變,但是此時(shí)是做不到的,因?yàn)槲覀儫o(wú)法在UITabBarController中修改navigationBar的內(nèi)容。
所以一般來(lái)說(shuō)我們會(huì)讓tabBarController作為根控制器,如果其他自定義的子控制器需要navigationController,那么就讓每個(gè)自定義的控制器對(duì)應(yīng)的navigationController作為tabBarController的子控制器,然后讓自定義的控制器作為navigationController的子類。這樣就可以在自定義控制器中修改navigationController的navigationBar顯示內(nèi)容。
 

相關(guān)文章

  • iOS中監(jiān)聽UITextField值改變事件的方法實(shí)例

    iOS中監(jiān)聽UITextField值改變事件的方法實(shí)例

    UITextField 是一個(gè)用來(lái)處理文本輸入和現(xiàn)實(shí)的控件,在我們的開發(fā)當(dāng)中也是經(jīng)常被用到。下面這篇文章主要給大家介紹了關(guān)于iOS中監(jiān)聽UITextField值改變事件的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-07-07
  • iOS中讓多個(gè)cell上都出現(xiàn)倒計(jì)時(shí)的分析與實(shí)現(xiàn)

    iOS中讓多個(gè)cell上都出現(xiàn)倒計(jì)時(shí)的分析與實(shí)現(xiàn)

    這篇文章主要給大家介紹了在iOS中每個(gè)cell上都出現(xiàn)倒計(jì)時(shí)的分析與實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編一起來(lái)學(xué)習(xí)學(xué)習(xí)吧。
    2017-07-07
  • swift 常用高階函數(shù)分享

    swift 常用高階函數(shù)分享

    Swift是一門面向協(xié)議的語(yǔ)言,在使用Swift時(shí)我們已經(jīng)充分享受到了面向協(xié)議編程帶給我們的便利,但是Swift相比Obj-C還有一個(gè)更重要的優(yōu)點(diǎn),那就是對(duì)函數(shù)式編程提供了很好的支持,其中Swift提供了map,filter,reduce這三個(gè)高階函數(shù)Higher Order function作為對(duì)容器的支持
    2017-12-12
  • IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色

    IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色

    在項(xiàng)目開發(fā)中,我們經(jīng)常要用到UISearchBar,在網(wǎng)上看到了很多關(guān)于去除掉他背景色的方法,都已經(jīng)失效了,今天來(lái)分享一個(gè)正常使用的方法,希望能幫到大家
    2014-09-09
  • 深入講解iOS開發(fā)中應(yīng)用數(shù)據(jù)的存儲(chǔ)方式

    深入講解iOS開發(fā)中應(yīng)用數(shù)據(jù)的存儲(chǔ)方式

    這篇文章主要介紹了iOS開發(fā)中應(yīng)用數(shù)據(jù)的存儲(chǔ)方式,包括plistXML屬性列表和NSKeydeArchiver歸檔兩個(gè)部分,需要的朋友可以參考下
    2015-12-12
  • 詳解IOS四種保存數(shù)據(jù)的方式

    詳解IOS四種保存數(shù)據(jù)的方式

    本篇文章主要介紹了OS四種保存數(shù)據(jù)的方式,現(xiàn)在分享給大家,也給大家做個(gè)參考。感興趣的小伙伴們可以參考一下。
    2016-11-11
  • iOS開發(fā)之UITableView詳解

    iOS開發(fā)之UITableView詳解

    在iOS開發(fā)中UITableView可以說(shuō)是使用最廣泛的控件,我們平時(shí)使用的軟件中到處都可以看到它的影子,類似于微信、QQ、新浪微博等軟件基本上隨處都是UITableView。當(dāng)然它的廣泛使用自然離不開它強(qiáng)大的功能,今天這篇文章將針對(duì)UITableView重點(diǎn)展開討論
    2016-04-04
  • iOS應(yīng)用中使用AsyncSocket庫(kù)處理Socket通信的用法講解

    iOS應(yīng)用中使用AsyncSocket庫(kù)處理Socket通信的用法講解

    這篇文章主要介紹了iOS應(yīng)用中使用AsyncSocket庫(kù)處理Socket通信的用法講解,AsyncSocket同時(shí)支持TCP和UDP,文中展示了其建立斷開連接及發(fā)送接收消息的操作,very好用,需要的朋友可以參考下
    2016-05-05
  • IOS自定義UIView

    IOS自定義UIView

    本文主要介紹下存代碼的自定義UIView和能夠在storeboard中實(shí)時(shí)顯示效果的自定義UIView。下面跟著小編一起來(lái)看下吧
    2017-03-03
  • ios開發(fā) try-catch引起的野指針問(wèn)題排查

    ios開發(fā) try-catch引起的野指針問(wèn)題排查

    這篇文章主要為大家介紹了ios開發(fā) try-catch引起的野指針問(wèn)題排查,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09

最新評(píng)論

临潭县| 巩留县| 钦州市| 安丘市| 璧山县| 资讯 | 无极县| 古浪县| 长沙县| 西盟| 龙川县| 许昌市| 泾川县| 廉江市| 西盟| 濉溪县| 龙海市| 沂源县| 兰西县| 那坡县| 民权县| 滦平县| SHOW| 永胜县| 龙游县| 钟祥市| 涿州市| 邵阳县| 武川县| 满城县| 时尚| 乌海市| 津市市| 谷城县| 西贡区| 贡嘎县| 新巴尔虎右旗| 库车县| 海林市| 随州市| 丹棱县|