2014-12-01 4 views
1

tabBarController selectedIndex를 사용하여 탐색 표시 줄을 표시할지 결정했습니다. 오늘 대부분의 항목에서 모든 것이 정상적으로 작동했지만 이제 다음 코드 줄이 나타납니다.한 번의 클릭으로 UITabBarController selectedIndex가 지연됩니다.

self.tabBarController.selectedIndex 

은 현재 선택된 색인 대신 마지막으로 선택된 색인을 제공합니다. 이 코드 줄을 viewWillAppear에서 실행하여 tabBarController의 인덱스 1이있는 특정 뷰가 첫 번째 뷰에서 해당 탐색 모음을 표시하지 않도록합니다.

그러나 1 클릭 뒤를보고합니다. 예를 들어, 두 번째 인덱스를 클릭 한 다음 첫 번째 인덱스를 클릭하면 인덱스 1이있는 뷰 컨트롤러를 방금 클릭했지만 마지막 클릭이 인덱스 컨트롤러에서 인덱스 컨트롤러 2를 선택한 것으로 표시됩니다. 또한 selectedIndex는 항상 모든 뷰 컨트롤러를 처음 클릭 할 때 제대로 나열되지만 처음에는 tabBarController를 통해 보았을 때 수정되지 않습니다.

tabBarController 클래스 참조를 살펴 봤지만이 selectedIndex 속성은 간단해야합니다. 내가 뭘 놓치고 있니?

+0

dispatch_once 또는 무언가를 사용하거나 tabbar 대리자를 사용하십시오. – Andy

+0

@Andy는 귀하의 의견을 보내 주지만 다른 tabBar 인덱스를 통해보기 컨트롤러를 재사용하기 때문에 dispatch_once가 작동하지 않습니다. tabbar 대리자를 살펴 봤지만이 selectedIndex 지연을 수정하는 방법/이유가 표시되지 않습니다. 당신은 명확히 할 수 있습니까? –

+0

"다른 TabBar 인덱스간에 뷰 컨트롤러를 재사용하고 있습니까?" 컨트롤러 설정을 설명하십시오. – rdelmar

답변

0

문제는 인덱스가 실제로 변경되기 전에 viewWillAppear이 호출된다는 것입니다. 먼저, tabBarController shouldSelectViewController -> viewWillAppear -> tabBarController didSelectViewController -> viewDidAppear입니다. 다른 TabBar 인덱스에서 ViewController를 다시 사용하는 비슷한 설정이 있습니다. viewDidAppear에서 selectedIndex를 확인하고 싶지는 않지만 문제를 해결할 수는 있습니다. 문제를 해결하기 위해 수행 한 작업은 태그를 사용하는 것이 었습니다. 두 ViewController는 서로 다른 UINavigationController를 가지며 하나의 navBar 태그를 1로 설정합니다. 어떤 컨트롤러가 활성 상태인지 알아야 할 때마다 이제 태그를 확인합니다.

관련 문제