2013-09-24 2 views
7

와 나는 다음과 같은 코드가 있습니다아이폰 OS 7 : UINavigationBar 동기화되지 UINavigationController가

NSArray* stack = self.navigationController.viewControllers; 
NSArray* newStack = @[stack[0], stack[2]]; 
[self.navigationController setViewControllers:newStack animated:NO]; 

stack 3 뷰 컨트롤러를 포함한다. 문제는 탐색 모음에서 일치시킬 UINavigationItems를 제거하지 않기 때문에 self.navigationController.navigationBar.items.count이이 코드를 실행 한 후에도 여전히 3을 반환한다는 것입니다. 돌아 오는 것은 당신을 압박 할 수있는 뒤로 버튼이있는 기묘한 상태로 데려다 주지만 더 이상 뒤로 물러선 것은 아닙니다.

iOS 7의 버그입니까? 아니면 정말 바보 같은 것을하려고하고 있습니까? 이 문제를 수정하거나 해결하는 가장 좋은 방법은 무엇입니까?

+1

답변이나 수정 사항이 있습니까? – nicktmro

답변

0

설명하는 동작이 손상된 탐색 컨트롤러 스택입니다. 이것은 아마도 navigationController를 부적절하게 사용하려고하기 때문일 수 있습니다. 여기에 코드의 컨텍스트가 많지는 않지만 루트 뷰 컨트롤러로 건너 뛰려 고합니다. 나는이 더 필요한 것이 무엇 아마 생각 :

https://developer.apple.com/library/ios/documentation/uikit/reference/UINavigationController_Class/Reference/Reference.html#//apple_ref/occ/instm/UINavigationController/popToRootViewControllerAnimated :

당신이 다음과 같이 뭔가 버튼을 사용자 정의를 다시 추가 할 것입니다 :

UIBarButtonItem* backButton = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStyleBordered target:self action:@selector(yourMethodToPopToRoot)]; 
//yourMethodToPopToRoot is a method you create that runs popToRootViewController 
self.navigationItem.leftBarButtonItem = backButton; 

어떤 질문을 알려주세요.

9

navigationBar에는 viewDidAppear가 히트 할 때까지 업데이트되지 않는 자체 '항목'스택이 있습니다.

즉, setViewViewrollers를 사용하여 navigationDidLoad에서 탐색 컨트롤러의 스택을 다시 작성하면 viewDidAppear에 도달하면 현재 항목이 막대의 'items'스택에 추가되므로 UINavController viewController 스택이 표시되지 않습니다. UINavBar 항목 스택과 동기화됩니다. 이것은 iOS 7 버그 인 것 같습니다.

iOS 6.0에서는 새로운 viewControllers 스택을 설정 한 위치에 상관없이 2 개의 다른 스택이 동기화되지 않습니다.

따라서 viewDidAppear에서 코드를 이동하고 문제가 해결되는지 확인하십시오. 나는 그것이 할 것이기 때문에 내기를 걸 것이다.

+0

iOS 9.2.1에서도이 내용을 볼 수 있습니다. 관심있는 사람이 있다면 최소한으로 재현 할 수있는 예가 있습니다. http://pastebin.com/Ef8Z6yWW – Anurag

관련 문제