読者です 読者をやめる 読者になる 読者になる

プログラミングノート

一からものを作ることが好きなエンジニアの開発ブログです。

UITabBarControllerの利用

Interface Builderを使わずに作るシリーズ、今回はUITabBarControllerです。Window-Based Applicationのテンプレートを利用し、各タブの内容を管理するためのUIViewControllerを2つを追加して作成しています(Page1ControllerとPage2Controller)。サンプルコードはこちらからどうぞ。


TabBarSampleAppDelegate.h

UITabBarControllerのインスタンスを追加します。UITabBarControllerDelegateは必要なのかいまいち分かりませんが、Tab Bar Applicationのテンプレートを選択した場合には指定されています。

@interface TabBarSampleAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
  UIWindow *window;
  UITabBarController *myTabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) UITabBarController *myTabBarController;
TabBarSampleAppDelegate.m

UIViewControllerを必要な数だけ生成して、UITabBarControllerに追加します。
UIViewControllerの利用についてはこちらをどうぞ。

#import "TabBarSampleAppDelegate.h"
#import "Page1Controller.h"
#import "Page2Controller.h"

@implementation TabBarSampleAppDelegate

@synthesize window, myTabBarController;

- (void)applicationDidFinishLaunching:(UIApplication *)application {

  Page1Controller *page1 = [[[Page1Controller alloc] initWithNibName:nil bundle:nil] autorelease];
  Page2Controller *page2 = [[[Page2Controller alloc] initWithNibName:nil bundle:nil] autorelease];
	
  myTabBarController = [[UITabBarController alloc] initWithNibName:nil bundle:nil];
  [myTabBarController setViewControllers:[NSArray arrayWithObjects:page1, page2, nil] animated:NO];

  [window addSubview:myTabBarController.view];
  [window makeKeyAndVisible];
}

- (void)dealloc {
  [myTabBarController release];
  [window release];
  [super dealloc];
}
@end
Page1Controller.m

Page1ControllerとPage2Controllerはほぼ同じ内容です。初期化時にタブに表示されるタイトル、画像を指定します。badgeValueを設定するとメールの未読数などに利用されている数字を表示できます。ここに表示している画像はIcon Libraryのものを利用させて頂いています。

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
    if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
		self.view.backgroundColor = [UIColor lightGrayColor];		
		self.title = @"page1";
		self.tabBarItem.image = [UIImage imageNamed:@"shopping_cart_32.png"]; 
		self.tabBarItem.badgeValue = @"3";
    }
    return self;
}


最後に、現在表示しているページにページのタイトルを表示して終了です。
これでTab Bar Applicationのテンプレートと同等のアプリが出来上がりました。

- (void)viewDidLoad {
  [super viewDidLoad];
	
  UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(0, 200, 320, 30)];
  label.font = [UIFont boldSystemFontOfSize:22];
  label.backgroundColor = [UIColor lightGrayColor];
  label.textColor = [UIColor blackColor];
  label.text = @"Page1 View";
  label.textAlignment = UITextAlignmentCenter;		
  [self.view addSubview:label];			
  [label release];		
}