2013-11-04 2 views
0

로그인 페이지가있는 응용 프로그램이 있습니다. 그런 다음 루트 뷰 컨트롤러로 컬렉션보기가있는 탐색 컨트롤러로 이동합니다. 앱이 시작되고 컬렉션에 항목이 하나만있는 경우 탐색 컨트롤러가 해당 항목을 자동으로 푸시하고 사용자가 '뒤로'를 사용하여 컬렉션을 볼 수있게하려고합니다. 이것은 Apple의 'Notes'에있는 것과 동일한 동작입니다.Apple에서 '메모'를 에뮬레이트하고 '뒤로'보기가있는 탐색 컨트롤러로 앱을 시작하려면 어떻게해야합니까?

아이디어는 사용자가 즉시 앱을 사용하고 얼마 동안 앱을 사용한 후에 컬렉션보기의 필요성을 '발견'할 수있게하는 것입니다.

내보기 전환에 IB, 스토리 보드 및 단편을 사용하고 있습니다.

프로그래밍 방식으로 루트보기 컨트롤러에서 viewWillLoad에서 performSegue를 수행하는 경우 : 전환이 진행되는 동안 오류가 발생합니다.

performSegue를 호출하는 코드를 didLoad로 이동하면 사용자는 이중 전환이 발생합니다.

답변

0

실제로 나는 다음과 같은 것이 나를 위해 가장 잘 작동한다는 것을 알았습니다.

if (/* reason to change back list*/) { 
    UIViewController * rootViewController = [[UIStoryboard storyboardWithName:@"Main" bundle:nil] instantiateViewControllerWithIdentifier:@"backViewController"]; 
    NSArray * viewControllers = @[rootViewController, self]; 
    [self.navigationController setViewControllers:viewControllers animated:NO]; 
} 

setViewController가 스택을 조작하는 가장 좋은 방법 인 것 같습니다.

0

탐색 컨트롤러는 일반적으로 기본 스택 자체를 관리합니다. 즉, 초기보기 컨트롤러를 전달한 다음 연속보기 또는 pushViewController:animated:을 통해 스택이 변경됩니다. 그러나 수동으로 스택을 변경하지 못하게하는 것은 없습니다. prepareForSegue:sender:에서, 당신은 항목 수를 확인할 수 있으며 1 인 경우, 같은 것을 수행하는 대신 스택의 첫 번째 뷰 컨트롤러에서 시작하는 지금

UIViewController *singleItemViewController = [self.storyboard instantiateViewControllerWithIdentifier:@"SingleItem"]; 

NSMutableArray *viewControllers = [sender.destinationViewController.viewControllers mutableCopy]; 
[viewControllers addObject:singleItemViewController]; 
sender.destinationViewController.viewControllers = viewControllers; 

을, 당신은으로, 두 번째에서 시작 뒤로 이동하려면 뒤로 버튼을 누릅니다.

관련 문제