Скрыть UIToolbar UIBarButtonItems - PullRequest
14 голосов
/ 04 июня 2010

У меня есть UIToolbar, который я настроил с помощью IB с тремя кнопками, левой, средней и правой. В некоторых ситуациях я хотел бы не отображать среднюю кнопку. Кто-нибудь знает способ скрыть определенную кнопку внутри UIToolBar? Свойство скрытия отсутствует, все, что я могу найти, это setEnable, но это все равно оставляет кнопку, заставляющую пользователей задуматься о ее назначении. Я хотел бы отображать его только в ситуациях, когда он действительно используется.

Заранее спасибо!

Ответы [ 6 ]

28 голосов
/ 04 июня 2010

Сброс пунктов :

-(void)setItems:(NSArray *)items animated:(BOOL)animated

Вы можете получить текущие элементы, используя свойство items , затем просто удалите тот, который вы не хотите показывать, и передайте новый NSArray.

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

12 голосов
/ 08 августа 2013

Вместо того, чтобы угадывать индекс, я добавил IBOutlet для UIBarButtonItem, а затем удалил его по имени:

NSMutableArray *toolBarButtons = [self._toolbar.items mutableCopy];
[toolBarButtons removeObject:self._selectButton]; // right button
[self._toolbar setItems:toolBarButtons];

И конечно же помогает подключить розетки в конструкторе:)

6 голосов
/ 12 июля 2012

Вот как я это сделал ... слишком сильная головная боль, но это лучшее, что я мог придумать:

NSArray *toolBarArray = toolBar.items;
NSMutableArray *newToolBarArray = [NSMutableArray arrayWithArray:toolBarArray];
[newToolBarArray removeObjectAtIndex:2];
[newToolBarArray removeObjectAtIndex:1];
//remove whatever buttons you want to.

NSArray *finalTabBarArray =[[NSArray alloc] initWithObjects:newToolBarArray, nil];
[toolBar setItems:[finalTabBarArray objectAtIndex:0] animated:NO];
1 голос
/ 29 апреля 2016

Я знаю, что это довольно старая ветка для тех, кто ищет эту страницу для решения, вот и вы:

В iOS7 вы можете использовать этот подход, чтобы показать / скрыть кнопку панели инструментов:

    if(// your code Condition) 
{ self.toolbarBtn1.enabled = YES;
 self.toolbarBtn1.tintColor = nil; }
 else
 { self.toolbarBtn1.enabled = NO; 
self.toolbarBtn1.tintColor = [UIColor clearColor]; }

1 голос
/ 18 сентября 2012

Ответ Мохита - тот, который я использовал, но вам не нужно специально делать это NSArray, который устанавливает панель инструментов. Вы можете просто установить массив элементов как NSMutableArray. Никаких реальных преимуществ, которые я знаю, но это на несколько строк меньше кода. И таким образом вы можете взять массив и перемещаться по объектам UIButton, как любой другой массив с объектами, а затем просто сбросить панель инструментов с этим изменяемым массивом.

[newToolBarArray removeObjectAtIndex:2];
[newToolBarArray removeObjectAtIndex:1];
[toolBar setItems:newToolBarArray];
1 голос
/ 12 июля 2012

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

Мне пришлось заменить строку:

NSArray *finalTabBarArray = [[NSArray alloc] initWithObjects:newToolBarArray, nil];

с этим:

NSArray *finalTabBarArray = [newToolBarArray copy];

Тогда все работает отлично.

...