vincenthanna - Passion, Grace and Fire.

vh1981.egloos.com

포토로그



아이폰 개발 - UINavigationController 사용(interface builder없이 구현하기) iphone개발

프로젝트를 생성하고 생성된 xib파일을 모두 지운다.

AppDelegate에 root로 사용할 viewController와 navigationController를 가리킬 변수를 선언해 놓는다.



@interface AppDelegate : UIResponder <UIApplicationDelegate> {

    test1ViewController *viewController;

    UINavigationController* _navigationController;

}



앱이 실행될때 root로 사용할 viewController와 navigationController를 생성한다.



- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

    // 가장 최상위에 깔아놓는 Window 생성한다.

    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    

    // root 사용될 ViewController 생성한다.

    viewController = [[test1ViewController alloc]init];

    _navigationController = [[UINavigationController alloc]initWithRootViewController:viewController];

    


    // Override point for customization after application launch.

    [self.window addSubview:_navigationController.view];

    

    self.window.backgroundColor = [UIColor whiteColor];

    [self.window makeKeyAndVisible];

    return YES;

}



지금까지 한 것을 실행하면 앱 위에 네비게이션 바가 달려 있는것을 확인할 수 있다.

root로 사용하는 view에 이것저것 컨트롤들을 추가하고, 다음 viewController로 이동하는 코드를 넣어본다.

nib파일 없이 UI를 구성하려면  -(void)loadView 안에 원하는 생성코드를 삽입해야 한다.

viewController에는 아무것도 없으므로 UIView부터 생성하고 viewController의 view에 넣어야 한다.



// nib파일 사용하지 않고 UI 구성하려면 loadView함수 안에 컨트롤을 생성하는 코드를 넣는다.

- (void)loadView

{

    // 이곳에 처음 View 로드될 필요한 함수들을 작성한다.

    UIView *contentView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] applicationFrame]];

    self.view = contentView;

    self.title = @"TEST1"; //여기의 제목은 navigationBar가운데 출력이 된다.(현재창의 title 출력됨)

    

    UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect];    

    button.frame = CGRectMake(160.0f, 0.0f, 160.0f, 160.0f);

    button.center = CGPointMake(160.0f, 240.0f);

    

    [button setTitle:@"goto test2" forState:UIControlStateNormal];// 버튼의 타이틀을 표시한다.

    [button addTarget:self action:@selector(showinfo) forControlEvents:UIControlEventTouchUpInside];

    

    button.hidden = NO; // 버틴이 로딩될 보여지도록 한다.

    button.alpha = 1.0f; //버튼의 투명도를 결정한다.

    [self.view addSubview:button]; //메인 View 버튼을 붙인다.

}


-(void)showinfo {    

    test2ViewController* viewController = [[test2ViewController alloc]init];

    [self.navigationController pushViewController:viewController animated:YES]; //다음 컨트롤러로 이동하는 코드

}



UIViewController에서 상속받는 클래스를 생성하고 생성코드에서 이름을 test2ViewController로 한다.

-(void)loadView에서 view를 생성해서 달고 제목을 바꿔본다.



// Implement loadView to create a view hierarchy programmatically, without using a nib.

- (void)loadView

{

    UIView *contentView = [[UIView alloc]initWithFrame:[[UIScreen mainScreen] applicationFrame]];

    self.view = contentView;

    self.title = @"TEST2"; // 컨트롤러가 rootViewController이므로 이게 네비게이션바의 제목으로 뜬다.    

}



다시 실행하고 처음 창 가운데 버튼을 누르면 testViewController로 이동한다. navigationBar에 자동으로 이전으로 돌아가는 버튼이 생성된다.


navigation bar 내부 버튼의 text는 창 이동 후에 변경이 안된다.(self.navigationController로 접근해서 속성 변경이 적용이 안됨)

창 이동 전에 navigationItem의 bar button을 교체하는 방법으로 변경 가능하다.

([self navigationItem]을 통한 접근이 변경이 되고 다른 방법으로는 접근이 되지 않았음.)


// 이동후에 navigationBar 내부의 버튼 text 변경이 안된다.

// 이동하기 전에 backButton 교체하는 방법으로 text변경이 가능하다.

    UIBarButtonItem *backButton = [[UIBarButtonItem alloc]

                                   initWithTitle: @"Back"

                                   style: UIBarButtonItemStyleBordered

                                   target:nil action:nil];

    [[self navigationItem] setBackBarButtonItem: backButton];



덧글

  • movie online streami 2013/05/28 21:23 # 삭제 답글

    내가 해야하는 데 사용 매우 행복 찾을 수 이 웹 - site.I 원 사용자에 대한 감사 로 시간 이 멋진 읽기 배우고!에게 I 긍정적 즐기는 각 작은 의 조금 그것과 내가 가지고 당신 북마크 확인하기 글 | 새로운 물건 당신 블로그에.
댓글 입력 영역