2012-03-13 2 views
10

세 개의 UIViewController이있는 iOS 응용 프로그램에서 하나의 조건을 기준으로 중간을 건너 뛰고 첫 번째에서 세 번째로 직접 이동하려고합니다. 그러나 사용자는 세 번째 컨트롤러의 "뒤로"단추를 통해 두 번째 단추로 돌아올 수 있어야합니다.UINavigatonController를 사용하여 iOS 5 앱에서 UIViewController를 조건부로 건너 뜁니다.

[self performSegueWithIdentifier:@"segueId" sender:sender];viewDidLoad, viewWillAppear에서 시도했지만 디버그 로그에 표시된대로 탐색 모음이 손상됩니다. viewDidAppear에서이 코드를 호출해도 문제가 없지만 두 번째보기가 이미 표시되어 있습니다. 이는 내가 처음부터 피하려고했던 것입니다.

나는 또한 [self.navigationController pushViewController:vc animated:NO];을 시도했지만이 시간 디버그 로그에는 이러한 항목이 없는데도 결과는 비슷하게 손상된 탐색 모음입니다.

(가능한 경우) 지원되는 방법은 무엇입니까?

대상은 iOS 5.1이 적용된 iPhone4이며, 개발 환경은 Xcode 4.3입니다.

답변

8

다음 코드를 앱에서 사용합니다. 예상대로 정확하게 작동합니다. 당신이보기 컨트롤러를 건너 뛰려면

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    SecondViewController *secondVC = [self.storyboard instantiateViewControllerWithIdentifier:@"DetailViewController"]; 
    if (indexPath.row == 0) { 
     // skip second vc 
     ThirdViewController *thirdVC = [self.storyboard instantiateViewControllerWithIdentifier:@"ThirdViewControllerViewController"]; 
     [self.navigationController pushViewController:secondVC animated:NO]; 
     [self.navigationController pushViewController:thirdVC animated:YES]; 
    } 
    else { 
     // push second vc 
     [self.navigationController pushViewController:secondVC animated:YES]; 
    } 
} 
+0

응답 해 주셔서 감사합니다. 이런 방식으로 구현하려면 컨트롤러가 이전 컨트롤러의 데이터를 필요로하지 않아야합니다. 이제 우리의 응용 프로그램에서 각 컨트롤러는'prepareForSegue' 중에 컨트롤러에 대한 관련 데이터 (사용자 선택 기준)를 준비합니다. 이것이 제가 "건너 뛰기"(즉, segue가 자동으로 수행되는 것처럼) 할 수있는 무언가를 찾고 있었던 이유입니다. 너는 나에게 생각할 생각을했다. 그 아이디어를 앱에 적용 할 수 있는지 알아 봅시다. – alokoko

+0

약간의 셔플이 있었지만 작동 시켰습니다. 나는 여전히보기가 나타나기 전에 동일한 컨트롤러 내에서 작동하는 "건너 뛰기"(어쩌면 세그 또는 다른 방법을 통해) 방법이 있었으면 좋겠다. – alokoko

+0

하나의 세부 언급을 잊어 버렸습니다 : 건너 뛰기 후 세 번째 컨트롤러의 뒤로 단추는 두 번째 컨트롤러의 제목보다는 "뒤로"라는 레이블이 붙어 있습니다. 수동으로 설정해야합니까? – alokoko

2

당신은 그것은 공급 된 배열의 마지막 컨트롤러에 애니메이션되며, 사용자가 해당 스택 중 "뒤로"수있을 것 UINavigationController setViewControllers:animated:를 호출 할 수 있습니다.

원하는대로 뷰 컨트롤러 배열을 빌드 할 수 있습니다. 아마도 뷰 컨트롤러의 기존 배열로 시작합니다 :

NSMutableArray* newViewControllers = [[navController.viewcontrollers mutablecopy] autorelease]; 

[newViewControllers addObject: ...]; 

[navController setViewControllers: newViewControllers animated: YES]; 
+0

감사합니다. 이것은 스택을 깊숙히 그리고/또는보다 복잡한 상황에서 수정할 필요가있을 때 유용 할 것입니다. 다른 포스터에서 제안한대로 뷰 컨트롤러를 순차적으로 밀어내는 것이 좋습니다. – alokoko

관련 문제