2010-10-27 3 views
5

Как я могу удалить UITabBarItem из UITabBar?Удалить UITabBarItem

Я ничего не пробовал, потому что я ничего не нашел от поисков Google или документации для UITabBar, UITabBarController или UITabBarItem.

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

+0

Привет, @esqew, что вы уже пробовали? http://stackoverflow.com/questions/how-to-ask – jcolebrand

+0

Я ничего не пробовал, потому что ничего не нашел от поисков Google или документации для 'UITabBar',' UITabBarController' или 'UITabBarItem'. – esqew

ответ

9

UITabBar имеет NSArray набор предметов. Поскольку свойство items является NSArray, а не NSMutableArray, вам придется построить новый NSArray из существующего, лишенный объекта, который вы хотите удалить, а затем установить свойство items в новый массив.

/* suppose we have a UITabBar *myBar, and an int index idx */ 
NSMutableArray modifyMe = [[myBar items] mutableCopy]; 
[modifyMe removeObjectAtIndex:idx]; 
NSArray *newItems = [[NSArray alloc] initWithArray:modifyMe]; 
[myBar setItems:newItems animated:true]; 
+3

Помните, что '- [NSArray mutableCopy]' ваш друг. Кроме того, не забывайте '- [UITabBar setItems: анимированные:]'. –

+0

http://developer.apple.com также является вашим другом;) –

4

совет Майк Карон will throw an exception, если вы собираетесь изменить TabBar, который принадлежит к контроллеру.

В прошивкой 3.0 и выше, вы не должны попытки использовать методы и свойства этого класса, чтобы изменить панель вкладок, когда он связан с вкладками объектом бара контроллера. Модифицируя , панель табуляции таким образом приводит к выбросу исключения . Вместо этого любые изменения в панели вкладок или их элементов должны выполняться через панель интерфейса ввода-вывода . Вы можете еще непосредственно изменить объект панели вкладок, который не связан с панелью вкладок контроллер.

В этом случае self.tabBarItem=nil удалит его.

+0

В iOS 11 self.tabBarItem = nil только делает место хранения пустым, оно фактически не перетасовывает элементы, чтобы заполнить «удаленный» элемент. :( –

+1

https://stackoverflow.com/a/9908361/856925 имеет ответ, который все еще работает - удалите viewcontroller из списка контроллеров viewbarcontroller viewcontrollers. –

0

Примечания: это, кажется, не работает в прошивке 11. Это было все еще хорошо в прошивкой 10.

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

UITabBar *oldbar = self.tabBarController.tabBar; 
UITabBar *newbar = [[UITabBar alloc] initWithFrame:CGRectMake(0,0,oldbar.frame.size.width,oldbar.frame.size.height)]; 
NSMutableArray *olditems = [[oldbar items] mutableCopy]; 
[olditems removeObjectAtIndex:0]; 
NSArray *newitems = [[NSArray alloc] initWithArray:olditems]; 
[newbar setItems:newitems animated:false]; 
[oldbar addSubview:newbar]; 

это пласты, чисто поверх старого TabBar, и она сохраняет свою функциональность.

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