我怎样才能删除一个 UITabBarItem 从一个 UITabBar?

我还没有尝试过任何东西,因为我没有从谷歌搜索或文档中找到任何东西 UITabBar, UITabBarController, , 或者 UITabBarItem.

提前致谢!:)

有帮助吗?

解决方案

UI标签栏 有一个 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];

其他提示

迈克·卡伦的建议 会抛出异常 如果您打算修改属于控制器的 tabBar。

在iOS 3.0及以后,您不应尝试使用此类的方法和属性与Tab Bar Controlter对象关联时修改标签栏。以这种方式修改标签栏会导致异常。相反,对标签栏或其项目的任何修改都应通过Tab Bar Controller接口进行。您仍然可以直接修改与标签栏控制器不关联的选项卡栏对象。

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

笔记:这似乎在 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];

这将它干净地放置在旧选项卡栏的顶部,并且保留了其功能。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top