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