5

如何UITabBarItem从 a 中删除 a UITabBar

我没有尝试过任何东西,因为我没有从 Google 搜索或UITabBarUITabBarControllerUITabBarItem.

提前致谢!:)

4

3 回答 3

9

UITabBar有一个NSArray项目集合。由于 items 属性是 NSArray 而不是NSMutableArray,因此您必须从现有的没有要删除的对象的 NSArray 构造一个新的 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];
于 2010-10-27T20:04:56.693 回答
4

如果您打算修改属于控制器的 tabBar,Mike Caron 的建议将引发异常。

在 iOS 3.0 及更高版本中,当标签栏与标签栏控制器对象关联时,您不应尝试使用此类的方法和属性来修改标签栏。以这种方式修改标签栏会导致抛出异常。相反,对标签栏或其项目的任何修改都应通过标签栏控制器界面进行。您仍然可以直接修改与标签栏控制器无关的标签栏对象。

在这种情况下self.tabBarItem=nil将删除它。

于 2011-01-10T06:55:42.487 回答
0

注意:这似乎在 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];

这将它干净地分层在旧标签栏的顶部,并保持其功能。

于 2013-02-16T23:35:28.517 回答