Удалить UITabBarItem - PullRequest
       7

Удалить UITabBarItem

5 голосов
/ 27 октября 2010

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

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

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

Ответы [ 3 ]

9 голосов
/ 28 октября 2010

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];
4 голосов
/ 10 января 2011

Совет Майка Карона вызовет исключение , если вы собираетесь изменить tabBar, принадлежащий контроллеру.

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

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

0 голосов
/ 17 февраля 2013

ПРИМЕЧАНИЕ. Похоже, что это не работает в iOS 11. В iOS 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];

Этот слой аккуратно размещается поверх старой панели вкладок и сохраняет свою функциональность.

...