본문 바로가기
프로그래밍/iOS

탭바(UITabBarController) 2장 - 최상위뷰 구현

by 백룡화검 2012. 2. 9.


탭바는 최상위뷰에 여러 탭이 붙어있는 멀티뷰 형식입니다. 따라서 처음에는 최상위뷰를 먼저 구현해줘야합니다.

Xcode를 켠뒤 "Create a new Xcode project" - "Window-based Application"을 선택합니다.




제일 어렵다는 프로젝트명은 대충 만들어주세요.



바로 파일을 추가해줍니다. 탭을 터치할때마다 보여지게될 뷰입니다.



"UIViewController subclass"를 선택해주세요. 밑에 With XIB for user interface 선택은 해주셔도 안해주셔도 상관업습니다.



클래스명은 1장에서 봤던 템플릿과 비슷하게 "FirstViewController"로 정했습니다. 중요한거 아니니 취향대로 정해주세요.



우리는 2개짜리를 먼저 만들어볼께요. 한번더 똑같이 추가해주세요. "SecondViewController"로 만들었습니다.



TabBarControllerAppDelegate.h로 갑니다.



#import <UIKit/UIKit.h>
#import "FirstViewController.h"
#import "SecondViewController.h"

@interface TabBarControllerAppDelegate : NSObject <UIApplicationDelegate> {
    UIWindow *window;
    UITabBarController *rootViewController;
}

@property (nonatomic, retain) IBOutlet UIWindow *window;

@end

=======================================================================================

#import "FirstViewController.h"
#import "SecondViewController.h"

최상위 뷰에 붙여줄 두개의 뷰컨트롤러 클래스를 참조시킵니다.


UITabBarController *rootViewController;

UITabBarController형식의 rootViewController를 선언했습니다. 이 rootViewController에 배열로 뷰들을 추가하게되면 탭바완성!!


이제 TabBarControllerAppDelegate.h로 갑니다.



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {   
   
    //탭바생성
    rootViewController = [[UITabBarController alloc] init];
    [window addSubview:rootViewController.view];
    [window makeKeyAndVisible];


    //탭바구성
    rootViewController.viewControllers = [NSArray arrayWithObjects:
                                      [[FirstViewController alloc] init],
                                      [[SecondViewController alloc] init],
                                      nil];
    return YES;
}

========================================================================================

rootViewController를 alloc해주고 init로 초기화시켰습니다. 이것을 window에 붙여줬습니다.

rootViewController.viewControllers는 배열을 잡아서 넣어주면 끝입니다. 여기서 각각의 뷰들을 alloc, init해줬고요, 끝에 nil을 빼먹지 마세요.


맵뷰에도 썼던거 같은데 [[FirstViewController alloc] init]는 [FirstViewController new]와 같은 표현입니다.

rootViewController.viewControllers = [NSArray arrayWithObjects:
                                      [FirstViewController new],
                                      [SecondViewController new],
                                      nil];

이렇게 코딩하셔도 됩니다.

한화면에 담을수 있는 최대 뷰의 갯수는 nil을 제외한 5개입니다. 그 이상이 되면 다음과같이 ...으로 그룹이 생성됩니다.



최상위 뷰가 완성되었습니다. 내용물은 아무것도 없지만.... 다음장에서 채워보도록하죠 =)