[iphone] 프로그래밍 방식으로 TabBar 탭보기로 전환 하시겠습니까?

UIButtoniPhone 앱에 하나의 탭보기가 있고의 탭 막대에서 다른 탭을 열고 싶다고 가정 해 봅시다 TabBarController. 이를 위해 코드를 어떻게 작성합니까?

기존보기를 언로드하고 특정 탭보기를로드한다고 가정하지만 코드를 정확하게 작성하는 방법을 모르겠습니다.



답변

Swift 또는 Objective-C에서이 코드를 사용해보십시오

빠른

self.tabBarController.selectedIndex = 1

목표 -C

[self.tabBarController setSelectedIndex:1];


답변

탭은 0부터 시작하여 색인화됩니다. 따라서 다음 코드 스 니펫이 작동합니다.

tabBarController = [[UITabBarController alloc] init];
.
.
.
tabBarController.selectedViewController = [tabBarController.viewControllers objectAtIndex:4];

막대의 다섯 번째 탭으로 이동합니다.


답변

내 의견이다 selectedIndex또는 사용이 objectAtIndex탭을 전환 할 수있는 가장 좋은 방법은 필요하지 않습니다. 탭을 재정렬하면 하드 코딩 된 인덱스 선택으로 인해 이전 앱 동작이 엉망이 될 수 있습니다.

전환하려는 뷰 컨트롤러의 객체 참조가있는 경우 다음을 수행 할 수 있습니다.

tabBarController.selectedViewController = myViewController

물론 반드시 myViewController의 목록에 있는지 확인해야합니다 tabBarController.viewControllers.


답변

selectedIndexUITabBarController 의 속성을 적절한 색인으로 설정하기 만하면 사용자가 탭 버튼을 탭한 것처럼보기가 변경됩니다.


답변

나는 Disco S2가 제안한 것을 시도했지만 가까이 있었지만 이것이 나를 위해 일한 결과입니다. 다른 탭 내에서 작업을 완료 한 후 호출되었습니다.

for (UINavigationController *controller in self.tabBarController.viewControllers)
{
    if ([controller isKindOfClass:[MyViewController class]])
    {
        [self.tabBarController setSelectedViewController:controller];
        break;
    }
}


답변

탭을 이동할 수있는 경우 코드는 다음과 같습니다.

for ( UINavigationController *controller in self.tabBarController.viewControllers ) {
            if ( [[controller.childViewControllers objectAtIndex:0] isKindOfClass:[MyViewController class]]) {
                [self.tabBarController setSelectedViewController:controller];
                break;
            }
        }


답변

Stuart Clark의 솔루션과 같지만 Swift 3의 경우 :

func setTab<T>(_ myClass: T.Type) {
    var i: Int = 0
    if let controllers = self.tabBarController?.viewControllers {
        for controller in controllers {
            if let nav = controller as? UINavigationController, nav.topViewController is T {
                break
            }
            i = i+1
        }
    }
    self.tabBarController?.selectedIndex = i
}

다음과 같이 사용하십시오.

setTab(MyViewController.self)

내 tabController는 navigationController 뒤에있는 viewController에 링크되어 있습니다. navigationController가 없으면 다음과 같습니다.

if let controller is T {