2012年2月3日 星期五

iOS學習_於UIViewController加上UITabBarController

在系統開發時,很多時候會有一些相類似的功能項目,需要在有限的界面上呈現,這時候通常都會以分頁(tab)的方式來呈現,在ipad當然也是,所以我們會看到很多程式都是以UITabBar來作為UI設計的主軸,若是遇到項目數目不定時,會希望以程式碼動態控制的方式來完成。

一般來說,我們會碰到的狀況是要在UIViewController加上TabBar的效果,但因為我們要加上的是包含UITabBarItem的UITabBar,所以必須操作最外層的UITabBarController。

h檔

#import
#import "FindLocation_hole.h"
#import "FindLocation_pipe.h"
#import "FindLocation_town.h"

@interface MapMain_FindLocation : UIViewController
{
UITabBarController *tabBarController;
FindLocation_hole *findhole;
FindLocation_pipe *findpipe;
FindLocation_town *findtown;
}
@property (nonatomic, retain) UITabBarController *tabBarController;
@property (nonatomic, retain) FindLocation_hole *findhole;
@property (nonatomic, retain) FindLocation_pipe *findpipe;
@property (nonatomic, retain) FindLocation_town *findtown;

@end

說明:我預計要加上三個tab,所以包含要加上的tab的View都一併宣告。

m檔

#import "MapMain_FindLocation.h"

@implementation MapMain_FindLocation

@synthesize findhole,findpipe,findtown,tabBarController;

-(void) initView
{
tabBarController = [[UITabBarController alloc] init];

findhole = [[FindLocation_hole alloc] init];
[findhole.tabBarItem initWithTitle:@"功能三" image:[UIImage imageNamed:@"search1_30" ] tag:0];

findpipe = [[FindLocation_pipe alloc] init];
//[findpipe.tabBarItem initWithTitle:@"功能二" image:[UIImage imageNamed:@"search2_30" ] tag:1];
[findpipe.tabBarItem initWithTabBarSystemItem:UITabBarSystemItemFeatured tag:1];

findtown = [[FindLocation_town alloc] init];
[findtown.tabBarItem initWithTitle:@"功能三" image:[UIImage imageNamed:@"search2_30" ] tag:2];

tabBarController.viewControllers = [NSArray arrayWithObjects:findhole,findpipe,findtown, nil];
[self.view addSubview:tabBarController.view];
}

說明:
在加入UITabBarItem時有兩種方式,一個是利用系統內的參數來加,那麼圖與說明都會跟SDK內的設定相同,或是你可以自己定義說明與加上去的文字。

最重要的是最後兩句,將各個要放入的View與UITabBar都定義好後,要放入UITabBarController的viewControllers,並且將UITabBarController加到目前的UIViewController內。

效果:


*如果你使用iPhone來看效果,那就會非常的正常,但是如果使用iPad就會看到上面的結果,TabBarItem的部分被切掉一半,並沒有完全地顯示。(解決方式

沒有留言:

張貼留言