Выберите нет вкладок в UITabBar - PullRequest
6 голосов
/ 26 мая 2010

Я пытаюсь вообще не выбирать вкладки в моем приложении. Сначала выбирается первая вкладка, но я бы хотел отменить ее выбор, чтобы не было выбранных вкладок вообще.

Не спрашивайте меня, почему, просто клиент так этого хочет! хехе

Спасибо за вашу помощь!

PS: я уже пробовал:

// rootController = UITabBarController    
rootController.tabBar.selectedItem = 0;
rootController.tabBar.selectedItem = nil;
[rootController setSelectedIndex:[rootController.items objectAtIndex:0]];
[rootController setSelectedIndex:nil];
[rootController setSelectedIndex:0];
// That one works : (but I can't select 0 or -1 for instance)
[rootController setSelectedIndex:2];

Есть идеи? Еще раз спасибо!

Ответы [ 7 ]

7 голосов
/ 21 июня 2010

Вы можете отменить выбор всех элементов панели вкладок, если используете экземпляр UITabBar без UITabBarController.

В таком случае приведенный ниже код работает хорошо.

[tabBar setSelectedItem:nil];

Если UITabBar является частью UITabBarController, приложение будет аварийно завершать работу с исключением:

'Управлять панелью вкладок напрямую контроллером панели вкладок нет разрешено ".

Другими словами, если вы хотите, чтобы это работало, вам нужно управлять подпрограммами панели вкладок вручную без контроллера.

2 голосов
/ 20 мая 2011

Я только что натолкнулся на этот вопрос, и на самом деле он очень прост:

tabBarController.selectedViewController = viewController;

Это несколько похоже на ответ HG, но установка выбранного контроллера представления в ноль не требуется.

1 голос
/ 24 августа 2015

Лучше изменить выбранное изображение, когда захотите, и скрыть или показать вид в соответствии с вашими требованиями. Вот мой кусок кода, который может помочь понять:

-(void)viewWillAppear:(BOOL)animated{
    if ([[NSUserDefaults standardUserDefaults]integerForKey:@"flagAsk"]) {
        UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0];
        firstTab.selectedImage = [[UIImage imageNamed:@"Ask2"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
                vieToHide.hidden=YES;
    }
    else{
        UITabBarItem *firstTab = [self.tabBarController.tabBar.items objectAtIndex:0];
        firstTab.selectedImage = [[UIImage imageNamed:@"Ask"] imageWithRenderingMode:UIImageRenderingModeAlwaysOriginal ];
        vieToHide.hidden=NO;
    }
}
1 голос
/ 18 апреля 2011

Мне наконец удалось сделать это, используя следующий код:

        DefaultView *defaultView = [[DefaultView alloc]initWithNibName:@"DefaultView" bundle:[NSBundle mainBundle]];
        [self.tabBarController setSelectedViewController:nil];
        [self.tabBarController setSelectedViewController:defaultView];

Обратите внимание, что просто выполнение [self.tabBarController setSelectedViewController:nil]; ничего не сделает. Вы ДОЛЖНЫ указать контроллер представления. Этот вид контроллера будет отображаться без выбранного значка tabBar. При выборе других опций TabBar стандартный вид исчезнет, ​​и будет загружен требуемый вид.

0 голосов
/ 05 декабря 2011

Я думаю rootController.tabBar.selectedItem = 0;

это неправильно, что бы вы ни пытались. Потому что, когда вы устанавливаете selectedItem=0, тогда обязательно будет первый tabBarItem из tabBarController.

0 голосов
/ 05 декабря 2011

Есть ли лучшие методы?

use [self.tabBarController setSelectedViewController:nil],
Warning : "-[UITabBarController setSelectedViewController:] only a view controller in the tab bar controller's list of view controllers can be selected."
0 голосов
/ 26 мая 2010

Из документации :

Этот контроллер представления является тем, пользовательское представление которого в настоящее время отображается интерфейсом панели вкладок. Указанный контроллер представления должен быть в массиве viewControllers. Назначение нового контроллера представления этому свойству изменяет текущий отображаемый вид, а также выбирает соответствующую вкладку в панели вкладок. Изменение контроллера представления также обновляет свойство selectedIndex соответственно. Значением по умолчанию для этого свойства является ноль.

Итак, я бы предположил, что вам нужно [rootController setSelectedViewController: nil];.

Обновление:

Чтобы уточнить немного,

[self.tabBarController setSelectedViewController:nil];

Существует также документация по , предотвращающая выбор вкладок , которая может быть полезна.

...