2011-01-07 6 views
5

내 앱에는 기본 탐색 컨트롤러가 있습니다. 하나만 제외하고 모든 내 의견에 대해 컨트롤러는 정상적으로 작동합니다.iPhone : 내비게이션 컨트롤러에서 뒤로 버튼을 어떻게 오버라이드합니까?

그러나 특히 한보기의 경우 '뒤로'단추는 이전보기로 돌아 가지 않고 설정 한보기로 이동합니다. 특히 그것은 2 개의보기로 돌아가서 하나를 건너 뜁니다.

- (void)viewWillDisappear:(BOOL)animated { 
[super viewWillDisappear:animated]; 
//i set a flag to know that the back button was pressed 
if (viewPushed) { 
    viewPushed = NO; 
} else { 
    // Here, you know that back button was pressed 
    mainMenu *mainViewController = [[mainMenu alloc] initWithNibName:@"mainMenu" bundle:nil]; 
    [self.navigationController pushViewController:mainViewController animated:YES]; 
    [mainViewController release]; 
} 

을}

:

내가 사라질 때 뷰를 가로 챌 수 있습니다, 그래서 내가 좋아하는 것 그것이 페이지로 이동이 코드에 넣어하려 발견 어떤 연구를하고 후 그게 효과가 없었어, 아무도 아이디어가 없니?

감사합니다.

답변

12

코드에서 다른보기 컨트롤러를 스택에 밀어 넣으려고 시도하는 것 같습니다. 추가 컨트롤러를 꺼내야합니다. 자신의 버튼으로

NSArray *vcs = [self.navigationController viewControllers]; 
[self.navigationController popToViewController:[vcs objectAtIndex:[vcs count]-3]; 

는 다른 방법이 완전히 뒤로 버튼을 대체 할 수 :

뒤로가는 두 단계를 수행 코드로이 시도? 당신의 ViewController에서 :

UIBarButtonItem *item = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(doSomething:)]; 

self.navigationItem.hidesBackButton = YES; 
self.navigationItem.leftBarButtonItem = item; 
[item release]; 

는 그런 다음 해봐요을 작성할 수 있습니다 방법은 아마도 제가 위에서 게시 된 코드를 사용하여, 스택에서 두 항목을 팝업.

+0

지금까지 잘 작동합니다! 당신의 응답을 주셔서 감사합니다!! 커스텀 버튼을 생성하고, 메소드를 생성하고, 열린 뷰리스트로 배열을 생성 할 수있었습니다. 그러나, 나는 popToViewController 라인을 넘을 때 '잡히지 않는 예외'오류가 발생합니다 ... 심지어 이것을 시도 : [self.navigationController popToViewController : [vcs objectAtIndex : 1]]; 아무 소용이 없습니다. 지금 popToViewController에 대해 더 연구하고 있습니다. –

+0

나는 결국 다음을 사용했다 : [self.navigationController popToViewController : [self.navigationController.viewControllers objectAtIndex : 0] animated : YES]; 두 단계로 돌아가려면 .. 지금까지 훌륭하게 작동합니다. 감사합니다! –

+0

최상위 레벨로 되돌아 가려면 popToRootViewControllerAnimated가 있어야합니다. 어느 것이 작동해야합니다. –

2

UINavigationBarDelegate 대리자를 구현해 볼 수 있습니다. -navigationBar:didPopItem: 메서드가 호출되면 UINavigationController에서 추가 항목을 팝업하여 한 번에 두 항목을 팝업 할 수 있습니다.

+0

입니다 뒤로 탐색을 확인합니다. 차이점은 - (BOOL) navigationBar : (UINavigationBar *) navigationBar shouldPopItem : (UINavigationItem *) UINavigationBarDelegate의 항목 메소드를 구현해야한다는 것입니다. –

3

간단한 솔루션 :이 예를 들어, UINavigationController가 popViewControllerAnimated 메소드를 오버라이드 (override)하는 방법도 다소

- (void)viewWillDisappear:(BOOL)animated { 
    //if true, back was pressed 
    if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) { 
      //your logic 
    } 
} 
+0

깨끗한 해결책 .iOS에서 작동한다. 9. 감사합니다. –

+0

무엇을 다시 탐색하기 전에 조건을 확인하고 그 조건이 실패하면, 다시 탐색하기 위해 멈추고 싶습니다. 당신은 창문이나 안드로이드를 안다. 그런 다음 나는 e.handled = true와 같은 것을 원한다. – Yawar

-1
UIButton *home = [UIButton buttonWithType:UIButtonTypeCustom]; 
UIImage *homeImage = [UIImage imageNamed:@"back.png"]; 
[home setBackgroundImage:homeImage forState:UIControlStateNormal]; 
[home addTarget:self action:@selector(LogOut) 
forControlEvents:UIControlEventTouchUpInside]; 
home.frame = CGRectMake(0, 0, 69, 26); 
UIBarButtonItem *button2 = [[UIBarButtonItem alloc] initWithCustomView:home]; 
[[self navigationItem] setLeftBarButtonItem:button2]; 
[button2 release]; 
button2 = nil; 
관련 문제