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

詳解iOS App中UiTabBarController組件的基本用法

 更新時間:2016年05月18日 09:30:43   作者:Nono_Love_Lilith  
UiTabBarController組件即是用來創(chuàng)建App中的Tab視圖切換選項欄,下面將詳解iOS App中UiTabBarController組件的基本用法,包括左右滑動切換標(biāo)簽頁等基本功能的實現(xiàn),需要的朋友可以參考下

UiTabBarController這個控制器絕對是項目架構(gòu)時做常用的一個控件。
我們大致看下控件的效果,我們就知道為什么說他常見了。

201651892122380.png (366×506)

這就是最簡單的一個雛形,想必現(xiàn)在基本70%的應(yīng)用界面結(jié)構(gòu)都會是這樣的。
在Android中我們以ActivityGroup或是現(xiàn)在的fragment來實現(xiàn),一個容器中包含多個子控制器。
下面我們還是以建立xib文件的形式來實現(xiàn)一個這樣的整體布局的例子。
當(dāng)然在 xcode中我們會發(fā)現(xiàn)其實直接有這么一個模板了

201651892201121.png (647×201)

但是直接使用模板后會發(fā)現(xiàn)是直接在代碼里實現(xiàn)了子布局得添加,由于我們不熟練,對于item,tabbar什么的圖片文字自定義,一下子找不到代碼里的api,
可能說用xib來實現(xiàn)可以看得比較明了。
據(jù)說以前直接有base_window模板,不過沒關(guān)系,模板只是為了給我快速建立一個應(yīng)用而已,我們這邊手動的從最基礎(chǔ)得開始
1.首先建立一個Empty Application

2.建立完后我們自定頂一個MainWindow.xib(當(dāng)然,這個名字可以隨意取,但是按照規(guī)范以及一種默認留下來的習(xí)慣),作為應(yīng)用啟動時加載的首個nib文件,
在新建xib文件你可以選擇window也可以是empt什么,其實都差不多,我們這邊選window模板得xib文件

3.然后我們其實是要把XXXAppdelegate和這個xib文件連接起來。因此把.h文件定義成這樣:

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

#import <UIKit/UIKit.h>

@interface NonoAppDelegate : UIResponder <UIApplicationDelegate>
{
    UIWindow *window;
    UITabBarController *tabTarController;
}

@property (retain, nonatomic) IBOutlet UIWindow *window;//該控件模板生成是不帶IBOutlet的,但是我們?yōu)榱藊ib文件布局得統(tǒng)一性,將其也作為一個輸出口和在Mainxib中連接起來可以
@property (retain, nonatomic) IBOutlet UITabBarController *tabTarController;
@end


4.然后我們來大致設(shè)計我們的xib文件,打開MainWindow.xib文件,我們大致看到視圖元素,一個是文件擁有者Filesowner,然后是reponder(這個一直沒
怎么用到,具體干嗎使的還不是明確),然后最主要得是Object這個標(biāo)簽下得元素,此時就一個window。
首先我們要將文件擁有者這個類改成UIApplication,點擊File'sOwner標(biāo)簽后在右側(cè)的屬性欄選擇Indentity  inspector,看到此時customclass是NSobject,
我們改成UIApplication,改完后會發(fā)現(xiàn)File'sOwner得Outlets用了一個delegate的輸出口東東,看過上一篇關(guān)于outlets和reference outlet我們就知道,
這個東東等會可以指向一個實例對象什么的。

5.好了,那么我們在object下的添加一個delegate的對象,操作很簡單,在右側(cè)控件組中

201651892223305.png (664×256)

拖一個這樣得對象到xib下得Object標(biāo)簽下,

然后我們來自定這個對象,根據(jù)上面所知,我們大致可以知道我們需要一個類似于delegate類得對象,對了

我們的AppDelegate不就剛好是這么一個東西么。于是很自然的,選中這個object然后在右側(cè)屬性欄將custom class設(shè)置成NonoAppDelagate。

然后點擊File's Owner將其輸出口delegate和我們剛放上去的NonoAppdelagate鏈接起來。


6.設(shè)置完以上后,我們可以點擊Object下得XXXAppDelegate,然后看右邊屬性欄的 Outlets,對了,我們剛在該文件得.h中申明過兩個輸出口,此刻我們是

要創(chuàng)建兩個這樣的對象然后將其連接起來。window這時已經(jīng)有了,還少個UITabBarController。那么我們從右邊拖個過來咯

然后輸出口和對象鏈接起來。

此刻,最基本的tabbarcontroller布局框架就ok了,此刻的xib文件如下圖

201651892257438.png (900×500)

然后我們打開AppDelegate.m進行實現(xiàn)和修改

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

#import "NonoAppDelegate.h"

@implementation NonoAppDelegate

@synthesize window ;
@synthesize tabTarController ;

- (void)dealloc
{
    [self.window release];
    [self.tabTarController release];
    [super dealloc];
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
//    self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];
    // Override point for customization after application launch.
    self.window.backgroundColor = [UIColor whiteColor];
    self.window.rootViewController = self.tabTarController;
    [self.window makeKeyAndVisible];
    return YES;
}


恩,就是這么簡單。
理論上我們現(xiàn)在啟動模擬器后程序可以啟動了。
但是卻發(fā)現(xiàn)起來后是空白的。
我們從應(yīng)用的main.m中看
復(fù)制代碼 代碼如下:

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([NonoAppDelegate class]));
    }
}

然后應(yīng)用到了我們自定義得delegate類了,然后發(fā)現(xiàn)一個問題,按照這個流程,我們MainWindow.xib文件貌似沒加載進來啊.
這就對了,以前我們定義個controller的xib文件后都會有initWithNibName,而對于UIApplication類型的xib文件(其實局勢整個應(yīng)用最先要啟動的一個類),
據(jù)說是這樣的加載

201651892436632.jpg (900×409)

這個具體你可以去看上一篇中提到過ios應(yīng)用啟動內(nèi)容,有個不錯得博文給了很好得一個解釋。
此刻我們可以將main.h代碼稍微修改下

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

#import <UIKit/UIKit.h>

#import "NonoAppDelegate.h"

int main(int argc, char *argv[])
{
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, nil);

    }
}


原本第四個參數(shù)是指定AppDelegate,但是我們知道,在加載MainWindow.xib實例化里面一個delegate對象時,我們已經(jīng)鏈接了AppDelegate類了,
感覺如果第四個參數(shù)指定后,這個類像是被實例化了2次,更多具體內(nèi)容還是參考上面提到那個博客去看吧。

7.好了。最基本得tabbar界面完成,接下來是往里面添加子控制器。
首先我們來熟悉下UITabBarController這個控件:
從界面我們可以推測出,該控件里面大致上有什么東西:
1>.應(yīng)該有個類似于管理一組子控件的東西吧。
2>界面下面切換得切換條吧 tabBar
3>當(dāng)然還回發(fā)現(xiàn)有個delegate這樣得東西,就是代理對象么。
當(dāng)然上面是在代碼中,我們得到這些屬性,做相應(yīng)得操作。
在xib文件里可能說看上去會比較直觀

201651892502600.png (648×503)

1>Tab bar里面放的是由一個或是多個TabbarItem組成的數(shù)組,每個itm對應(yīng)一個ViewController。
2>下面的 First,Second等等就是每個Item對應(yīng) 的Controller,這里也要注意一點,默認的我們我們拖進去一個
TabBarItem,一般我們會設(shè)置對應(yīng)得XXXcontroller.xib文件

201651892525978.png (298×241)

之后還需將Custom class改成對應(yīng)XXXXController類,因為默認的類是UIViewController。這會在應(yīng)用啟動后報錯的。
3>tabbarItem中可以設(shè)置title ,系統(tǒng)默認的幾種圖標(biāo),還有是自定義圖標(biāo),以及badgeValue,就是上面標(biāo)簽上每個紅色的值,
這個比Android上先見之明多了呵呵。
4> 當(dāng)?shù)撞康陌粹o超過5個時,系統(tǒng)會自動增加一個more按鈕,點擊more后,剩余的按鈕會被顯示出來。

201651892543769.jpg (358×693)

201651892602146.jpg (369×696)

8.UITabbarController左右滑動切換標(biāo)簽頁 
每個Tabbar ViewController都要添加如下代碼,建議在基類中添加:

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

ViewDidLoad
UISwipeGestureRecognizer *swipeLeft = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tappedRightButton:)];

    [swipeLeft setDirection:UISwipeGestureRecognizerDirectionLeft];

    [self.view addGestureRecognizer:swipeLeft];

   

    UISwipeGestureRecognizer *swipeRight = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(tappedLeftButton:)];

    [swipeRight setDirection:UISwipeGestureRecognizerDirectionRight];

    [self.view addGestureRecognizer:swipeRight];

再添加2個函數(shù),包含切換動畫效果:

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

- (IBAction) tappedRightButton:(id)sender

{

    NSUInteger selectedIndex = [self.tabBarController selectedIndex];

   

    NSArray *aryViewController = self.tabBarController.viewControllers;

    if (selectedIndex < aryViewController.count - 1) {

        UIView *fromView = [self.tabBarController.selectedViewController view];

        UIView *toView = [[self.tabBarController.viewControllers objectAtIndex:selectedIndex + 1] view];

        [UIView transitionFromView:fromView toView:toView duration:0.5f options:UIViewAnimationOptionTransitionFlipFromRight completion:^(BOOL finished) {

            if (finished) {

                [self.tabBarController setSelectedIndex:selectedIndex + 1];

            }

        }];

    }

   

}


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

- (IBAction) tappedLeftButton:(id)sender

{

    NSUInteger selectedIndex = [self.tabBarController selectedIndex];

   

    if (selectedIndex > 0) {

        UIView *fromView = [self.tabBarController.selectedViewController view];

        UIView *toView = [[self.tabBarController.viewControllers objectAtIndex:selectedIndex - 1] view];

        [UIView transitionFromView:fromView toView:toView duration:0.5f options:UIViewAnimationOptionTransitionFlipFromLeft completion:^(BOOL finished) {

            if (finished) {

                [self.tabBarController setSelectedIndex:selectedIndex - 1];

            }

        }];

    }


}

相關(guān)文章

  • IOS 獲取已連接的wifi信息的實現(xiàn)代碼

    IOS 獲取已連接的wifi信息的實現(xiàn)代碼

    這篇文章主要介紹了IOS 獲取已連接的wifi信息的實現(xiàn)代碼的相關(guān)資料,這里提供實現(xiàn)代碼幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下
    2017-08-08
  • Xcode 9下適配iPhoneX導(dǎo)致iOS 10不兼容問題的解決方法

    Xcode 9下適配iPhoneX導(dǎo)致iOS 10不兼容問題的解決方法

    這篇文章主要給大家介紹了關(guān)于Xcode 9下適配iPhoneX導(dǎo)致iOS 10不兼容問題的解決方法,文中通過圖文介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-04-04
  • 移動端固定輸入框在底部會被鍵盤遮擋的解決方法(必看篇)

    移動端固定輸入框在底部會被鍵盤遮擋的解決方法(必看篇)

    下面小編就為大家分享關(guān)于移動端固定輸入框在底部會被鍵盤遮擋的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2017-12-12
  • iOS鍵盤彈出遮擋輸入框的解決方法

    iOS鍵盤彈出遮擋輸入框的解決方法

    這篇文章主要為大家詳細介紹了iOS鍵盤彈出遮擋輸入框的解決方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • 淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)

    淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)

    ios提供了copy和mutablecopy方法,顧名思義,copy就是復(fù)制了一個imutable的對象,而mutablecopy就是復(fù)制了一個mutable的對象。本文給大家介紹iOS中的淺拷貝和深拷貝(copy和mutableCopy) ,感興趣的朋友一起看看吧
    2016-04-04
  • Objective-C const常量的優(yōu)雅使用方法

    Objective-C const常量的優(yōu)雅使用方法

    這篇文章主要為大家介紹了Objective-C const常量的優(yōu)雅使用方法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • iOS UITextView 首行縮進 撤銷輸入 反撤銷輸入的實現(xiàn)代碼

    iOS UITextView 首行縮進 撤銷輸入 反撤銷輸入的實現(xiàn)代碼

    本文是腳本之家小編給大家分享的iOS UITextView 首行縮進 撤銷輸入 反撤銷輸入的實現(xiàn)代碼,需要的朋友參考下吧
    2017-09-09
  • Xcode8打印一堆log問題的快速解決方法

    Xcode8打印一堆log問題的快速解決方法

    剛裝的xcode8,不知道從哪來的一堆log,很奇怪。怎么解決此問題呢?下面小編給大家分享本教程幫助大家了解Xcode8打印一堆log問題的快速解決方法,感興趣的朋友跟著小編一起學(xué)習(xí)吧
    2016-10-10
  • iOS如何使用自己添加的字體庫

    iOS如何使用自己添加的字體庫

    這篇文章主要為大家介紹了iOS如何使用自己添加的字體庫詳細過程,感興趣的小伙伴們可以參考一下
    2016-03-03
  • 詳解IOS開發(fā)中生成推送的pem文件

    詳解IOS開發(fā)中生成推送的pem文件

    這篇文章主要介紹了詳解IOS開發(fā)中生成推送的pem文件的相關(guān)資料,這里提供詳細的實現(xiàn)步驟幫助大家實現(xiàn),希望大家能理解掌握,需要的朋友可以參考下
    2017-08-08

最新評論

肥乡县| 永登县| 惠东县| 玉屏| 措美县| 横峰县| 凤台县| 怀柔区| 亳州市| 吴江市| 泰和县| 汤原县| 昂仁县| 东港市| 昭通市| 海阳市| 岳普湖县| 康平县| 通江县| 诸暨市| 墨竹工卡县| 罗城| 灵璧县| 临高县| 镇远县| 石屏县| 宣恩县| 常州市| 阜宁县| 濮阳县| 和林格尔县| 乌拉特后旗| 永德县| 蒲城县| 天等县| 雷山县| 军事| 高台县| 灵宝市| 靖安县| 读书|