Подтвердить что ты не робот

Программное изменение выбранной вкладки tabBarController

У меня есть базовый проект, созданный в xcode в качестве приложения "Tab Bar Application". Я бы хотел, чтобы приложение было загружено на вторую вкладку, если BOOL x истинно.

Сейчас у меня есть: (находится в FirstViewController.m в viewDidLoad)

if(x){
    [self.tabBarController setSelectedIndex:1];
}

Это приведет к тому, что выбранная вкладка в нижней части страницы выделит вторую вкладку, однако представление остается таковым на первой вкладке.

Как мне поменять вид на вторую вкладку?

4b9b3361

Ответ 1

Хорошо, я воспроизвел вашу проблему и решил ее, переместив логику переключения с -viewDidLoad на -viewDidAppear:. Итак, в основном, измените:

- (void)viewDidLoad {
    // Other code...
    if(x){
        [self.tabBarController setSelectedIndex:1];
    }
}

в

- (void)viewDidAppear:(BOOL)animated {
    // Other code...
    if(x){
        [self.tabBarController setSelectedIndex:1];
    }
}

Теперь о том, почему это так, я могу только догадываться, без дополнительных копаний, что это связано с порядком вещей, которые инициализируются. Возможно, что ваш view controller viewDidLoad вызывается до того, как контроллер родительской панели вкладок завершил свою собственную инициализацию. Удерживаясь, пока ваше представление не появилось, вы убедитесь, что все загружено и находится в согласованном состоянии.

Ответ 2

Предполагая, что вы работаете с контроллером, являющимся подклассом UITabBarController, вам нужно только установить свойство selectedIndex.

Например:

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    self.selectedIndex = 1;
}

Я предпочитаю выполнять это назначение в методе viewDidLoad, чтобы вы могли гарантировать, что будет отображаться только контроллер вида в выбранном индексе. Если вы используете функцию viewDidAppear, вы можете увидеть, что контроллер вида с индексом 0 отображается кратковременно, когда представление панели вкладок загружается до отображения индекса 1.

Ответ 3

Этого было бы достаточно:

[tabBar setSelectedIndex:0];

Ответ 4

[self.tabBarController setSelectedIndex:1]
[window addSubview:[tabBarController view]];
[window makeKeyAndVisible];

Ответ 5

Для Swift 3.0

if(x){ self.tabBarController?.selectedIndex = 1 }