2010년 4월 13일 화요일

popToViewController + NSNotification

0. 목적
UINavigationController의 popToViewController 메소드와 NSNotification 를 이용하여
특정시점의 viewController로 가서 페이지를 이동해보자.
A -> B -> c 순서로 viewController 이동되었다고 가정하고,
B,C를 무시하고 A 에서 D 로 바로 이동한것과
 같은 기능이 필요할때 적합하다.
(중간에 세팅화면 같은것을 거쳐야 할 경우등)

 
1. 코드

1-1. rootViewController

#import "Page2ViewController.h"

#import "Page1ViewController.h"

#import "popToViewControllerViewController.h"


@implementation popToViewControllerViewController

- (void)viewDidUnLoad{

[[NSNotificationCenter defaultCenter] removeObserver:self name:@"goPage2" object:nil];

}


- (void)viewDidLoad{

self.title = @"root";

self.view.backgroundColor = [UIColor yellowColor];

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(goPage2)    name:@"goPage2" object:nil];

UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(100,100,100,100)];

[button setTitle:@"go page 1" forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

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

[self.view addSubview:button];

[button release];

}


- (void)goPage1{

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

[self.navigationController pushViewController:viewController animated:YES];

[viewController release];

}


- (void)goPage2{

[self.navigationController popToViewController:self animated:NO];

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

[self.navigationController pushViewController:viewController animated:YES];

[viewController release];

}

@end



1-2. page1ViewController

@implementation Page1ViewController


- (void)viewDidLoad{

self.title = @"page1";

self.view.backgroundColor = [UIColor redColor];

UIButton* button = [[UIButton alloc] initWithFrame:CGRectMake(100,100,100,100)];

[button setTitle:@"go page 2" forState:UIControlStateNormal];

[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];

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

[self.view addSubview:button];

[button release];

}


- (void)goPage2{

[[NSNotificationCenter defaultCenter] postNotificationName:@"goPage2" object:nil];

}

@end


1-3. page2ViewController

@implementation Page2ViewController


- (void)viewDidLoad{

self.title = @"page2";

self.view.backgroundColor = [UIColor grayColor];

}


@end



test source :

댓글 없음:

댓글 쓰기