http://blog.naver.com/PostView.nhn?blogId=itperson&logNo=220844128147&parentCategoryNo=&categoryNo=72&viewDate=&isShowPopularPosts=false&from=postView


iOS에서 화면을 구성하는 방법에는 Storyboard , Xib  그리고 코드로 작성하는 방법이 있고, 화면을 전환하는 방법도 Seg를 이용한 방식이라든지 코드를 사용하는 방식 등이 있다.
여기서는 코드를 이용하여 출력할 Initial 뷰를 지정하고 전환하는 내용을 다룬다.

Storyboard를 사용하는 경우

아래 코드는 AppDelegate.m 파일의 didFinishLaunchingWithOptions 메소드에서 유저가 로그인했던 이력이 있으면 바로 메인 스토리보드로 이동하고, 아닌 경우 기본 프로젝트 설정에서 지정한 초기화면으로 이동하게 하는 내용이다.

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { BOOL isUserSignedIn = [UserInfo isUserSignedIn]; if ( isUserSignedIn ) { UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; self.window.rootViewController = [storyboard instantiateInitialViewController]; } return YES; }
Xib 사용할 경우

ViewControllerWithXib 라는 뷰컨트롤러를 만들어서 Xib와 연결하는 경우다.
Xib 파일 이름이 뷰컨트롤러 이름과 같다면 alloc, init 만으로 충분하고,
둘의 이름이 다르다면 initWithNibName 이라는 메소드로 xib 파일이름을 지정해주어야 한다.

# ViewController와 Xib의 이름이 같다면 alloc init 만 해주어도 된다. ViewControllerWithXib *vcX = [[ViewControllerWithXib alloc] init]; # Xib 이름이 다른 경우 이름을 지정해서 불러주어야 한다. ViewControllerWithXib *vcX = [[ViewControllerWithXib alloc] initWithNibName:@"XibName" bundle:nil]; self.window.rootViewController = vcX;
오직 코드로 View를 구성했을 경우

만약 Storyboard나 Xib를 사용하지 않고 코드만으로 뷰를 구성했을 때는 아래와 같이 단순히 해당 컨트롤러를 통해 객체를 생성해주고 window에 얹어주는 방식을 사용하면 된다.

ViewController *rootViewController = [[ViewController alloc] init];

Tabbar Controller 에 Navigation Controller 와 View Controller를 넣어 기본 Window에 올려보자.

UITabBarController *mainTabBarController = [[UITabBarController alloc] init]; //TabbarItem 1 MainTableViewController *tvc = [[MainTableViewController alloc] init]; UINavigationController *mainNavi = [[UINavigationController alloc] initWithRootViewController:tvc]; //TabbarItem 2 CellViewController *cvc = [[CellViewController alloc] init]; //TabbarViewcontrollers 설정 mainTabBarController.viewControllers = @[mainNavi, cvc]; mainNavi.tabBarItem.title = @"mainNavi"; cvc.tabBarItem.title = @"cvc"; self.window.rootViewController = mainTabBarController;
활용 예제
자동로그인 선택에 따른 초기 화면 지정

자동로그인이 체크되어 있을 경우 Main.storyboard 로 이동하고 아닌 경우는 Login.storyboard로 이동하게 하고 싶다고 해보자. 그럼 우선 오토로그인 설정값을 가져온 뒤 이 결과를 바탕으로 스토리보드를 선택하고 뷰컨트롤러를 연결해주어야 할 것이다.

BOOL isAutoLogin = [[NSUserDefaults standardUserDefaults] objectForKey:@"isAutoLogin"]; if (isAutoLogin) { UIStoryboard *firstStoryboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; self.window.rootViewController = [firstStoryboard instantiateInitialViewController]; }
화면 전환하기

로그인 된 상태가 아니어서 Login.storyboard로 이동 후 유저 정보를 입력하고 로그인 버튼을 눌렀다고 하자. 그럼 스토리보드를 이용해서 Seg를 통해 간단히 설정해줄 수도 있겠지만 아래와 같은 코드를 통해 연결해줄 수도 있다.

- (IBAction)pushLoginButton:(id)sender{ UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"Main" bundle:nil]; ViewController *vc = [storyboard instantiateInitialViewController]; [self presentViewController:vc animated:YES completion:nil]; }

필요없는 화면 종료는 dismiss 메서드를 사용한다.

- (IBAction)dismissViewButton:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; }