你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> 詳解iOS App中UiTabBarController組件的根本用法

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

編輯:IOS開發綜合

UiTabBarController這個掌握器相對是項目架構時做經常使用的一個控件。
我們年夜致看下控件的後果,我們就曉得為何說他罕見了。

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615502975.png (366×506)

這就是最簡略的一個雛形,想必如今根本70%的運用界面構造都邑是如許的。
在Android中我們以ActivityGroup或是如今的fragment來完成,一個容器中包括多個子掌握器。
上面我們照樣以樹立xib文件的情勢來完成一個如許的全體結構的例子。
固然在 xcode中我們會發明其實直接有這麼一個模板了

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615502950.png (647×201)

然則直接應用模板後會發明是直接在代碼裡完成了子結構得添加,因為我們不闇練,關於item,tabbar甚麼的圖片文字自界說,一會兒找不到代碼裡的api,
能夠說用xib來完成可以看得比擬清楚明了。
聽說之前直接有base_Window模板,不外沒緊要,模板只是為了給我疾速樹立一個運用罷了,我們這邊手動的從最基本得開端
1.起首樹立一個Empty Application

2.樹立完後我們自定頂一個MainWindow.xib(固然,這個名字可以隨便取,然則依照標准和一種默許留上去的習氣),作為運用啟動時加載的首個nib文件,
在新建xib文件你可以選擇Window也能夠是empt甚麼,其實都差不多,我們這邊選window模板得xib文件

3.然後我們實際上是要把XXXAppdelegate和這個xib文件銜接起來。是以把.h文件界說成如許:

#import <UIKit/UIKit.h>

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

@property (retain, nonatomic) IBOutlet UIWindow *window;//該控件模板生成是不帶IBOutlet的,然則我們為了xib文件結構得同一性,將其也作為一個輸入口和在Mainxib中銜接起來可以
@property (retain, nonatomic) IBOutlet UITabBarController *tabTarController;
@end

4.然後我們來年夜致設計我們的xib文件,翻開MainWindow.xib文件,我們年夜致看到視圖元素,一個是文件具有者Filesowner,然後是reponder(這個一向沒
怎樣用到,詳細干嘛使的還不是明白),然後最重要得是Object這個標簽下得元素,此時就一個window。
起首我們要將文件具有者這個類改成UIApplication,點擊File'sOwner標簽後在右邊的屬性欄選擇Indentity  inspector,看到此時customclass是NSobject,
我們改成UIApplication,改完後會發明File'sOwner得Outlets用了一個delegate的輸入口東東,看過上一篇關於outlets和reference outlet我們就曉得,
這個東東等會可以指向一個實例對象甚麼的。

5.好了,那末我們在object下的添加一個delegate的對象,操作很簡略,在右邊控件組中

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615502998.png (664×256)

拖一個如許得對象到xib下得Object標簽下,

然後我們來自定這個對象,依據下面所知,我們年夜致可以曉得我們須要一個相似於delegate類得對象,對了

我們的AppDelegate不就恰好是這麼一個器械麼。因而很天然的,選中這個object然後在右邊屬性欄將custom class設置成NonoAppDelagate。

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


6.設置完以上後,我們可以點擊Object下得XXXAppDelegate,然後看左邊屬性欄的 Outlets,對了,我們剛在該文件得.h中聲名過兩個輸入口,此刻我們是

要創立兩個如許的對象然後將其銜接起來。window這時候曾經有了,還少個UITabBarController。那末我們從左邊拖個過去咯

然後輸入口和對象鏈接起來。

此刻,最根本的tabbarcontroller結構框架就ok了,此刻的xib文件以下圖

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503082.png (900×500)

然後我們翻開AppDelegate.m停止完成和修正

#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;
}

恩,就是這麼簡略。
實際上我們如今啟動模仿器後法式可以啟動了。
然則卻發明起來後是空白的。
我們從運用的main.m中看

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

然後運用到了我們自界說得delegate類了,然後發明一個成績,依照這個流程,我們MainWindow.xib文件貌似沒加載出去啊.
這就對了,之前我們界說個controller的xib文件後都邑有initWithNibName,而關於UIApplication類型的xib文件(其實局面全部運用最早要啟動的一個類),
聽說是如許的加載

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503008.jpg (900×409)

這個詳細你可以去看上一篇中提到過IOS運用啟動內容,有個不錯得博文給了很好得一個說明。
此刻我們可以將main.h代碼略微修正下

#import <UIKit/UIKit.h>

#import "NonoAppDelegate.h"

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

    }
}

本來第四個參數是指定AppDelegate,然則我們曉得,在加載MainWindow.xib實例化外面一個delegate對象時,我們曾經鏈接了AppDelegate類了,
感到假如第四個參數指定後,這個類像是被實例化了2次,更多詳細內容照樣參考下面提到誰人博客去看吧。

7.好了。最根本得tabbar界面完成,接上去是往外面添加子掌握器。
起首我們來熟習下UITabBarController這個控件:
從界面我們可以推想出,該控件外面年夜致上有甚麼器械:
1>.應當有個相似於治理一組子控件的器械吧。
2>界面上面切換得切換條吧 tabBar
3>固然還回發明有個delegate如許得器械,就是署理對象麼。
固然下面是在代碼中,我們獲得這些屬性,做響應得操作。
在xib文件裡能夠說看上去會比擬直不雅

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503086.png (648×503)

1>Tab bar外面放的是由一個或是多個TabbarItem構成的數組,每一個itm對應一個ViewController。
2>上面的 First,Second等等就是每一個Item對應 的Controller,這裡也要留意一點,默許的我們我們拖出來一個
TabBarItem,普通我們會設置對應得XXXcontroller.xib文件

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503030.png (298×241)

以後還需將Custom class改成對應XXXXController類,由於默許的類是UIViewController。這會在運用啟動後報錯的。
3>tabbarItem中可以設置title ,體系默許的幾種圖標,還有是自界說圖標,和badgeValue,就是下面標簽上每一個白色的值,
這個比Android上先見之明多了呵呵。
4> 當底部的按鈕跨越5個時,體系會主動增長一個more按鈕,點擊more後,殘剩的按鈕會被顯示出來。

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503093.jpg (358×693)

https://www.ios5.online/ios/UploadFiles_8070/201703/2017031615503083.jpg (369×696)

8.UITabbarController閣下滑動切換標簽頁 
每一個Tabbar ViewController都要添加以下代碼,建議在基類中添加:

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個函數,包括切換動畫後果:

- (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];

            }

        }];

    }

   

}


- (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];

            }

        }];

    }


}

【詳解iOS App中UiTabBarController組件的根本用法】的相關資料介紹到這裡,希望對您有所幫助! 提示:不會對讀者因本文所帶來的任何損失負責。如果您支持就請把本站添加至收藏夾哦!

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved