2010-06-04 3 views
12

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

Заранее благодарен!

ответ

28

Reset the items:

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

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

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

+0

Ahh да, это работает. По какой-то причине я изначально думал, что это не так, но это произойдет. Благодаря! – jmurphy

+0

@jmurphy: Добро пожаловать! Рад, что у вас это работает. –

+6

Кажется, слишком много работы, чтобы скрыть кнопку, но она работает. –

6

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

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

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

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

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

с этим одним:

NSArray *finalTabBarArray = [newToolBarArray copy]; 

Затем он работает отлично.

0

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

[newToolBarArray removeObjectAtIndex:2]; 
[newToolBarArray removeObjectAtIndex:1]; 
[toolBar setItems:newToolBarArray]; 
12

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

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

И, конечно, это помогает соединить выходы в конструкторе :)

+0

красиво лаконичный Нико, даже с неортодоксальной переменной, названной для ваших свойств.Обычно «_» ассоциируется с автоматически синтезированными переменными, а не с самим свойством. ;) –

1

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

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

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

Смежные вопросы