删除 UITabBarItem
Posted
技术标签:
【中文标题】删除 UITabBarItem【英文标题】:Remove UITabBarItem 【发布时间】:2010-10-27 19:58:01 【问题描述】:如何从UITabBar
中删除UITabBarItem
?
我没有尝试任何东西,因为我没有从 Google 搜索或UITabBar
、UITabBarController
或UITabBarItem
的文档中找到任何东西。
提前致谢! :)
【问题讨论】:
嗨@esqew,你已经尝试了什么? ***.com/questions/how-to-ask 我没有尝试任何东西,因为我没有从 Google 搜索或UITabBar
、UITabBarController
或UITabBarItem
的文档中找到任何东西。
【参考方案1】:
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];
【讨论】:
记住,-[NSArray mutableCopy]
是你的朋友。另外,不要忽视-[UITabBar setItems:animated:]
。【参考方案2】:
如果您打算修改属于控制器的 tabBar,请参考 Mike Caron 的建议 will throw an exception。
在 ios 3.0 及更高版本中,您不应该 尝试使用这些方法和 修改这个类的属性 标签栏与 标签栏控制器对象。修改 标签栏以这种方式导致 抛出异常。相反,任何 修改标签栏或其 项目应该通过标签栏出现 控制器接口。你可能还 直接修改一个标签栏对象 不与标签栏关联 控制器。
在这种情况下,self.tabBarItem=nil
将删除它。
【讨论】:
在 iOS 11 中, self.tabBarItem=nil 只会使持有点为空,它实际上并没有随机播放项目以填充“已删除”项目。 :( ***.com/a/9908361/856925 的答案仍然有效——从 tabbarcontroller viewcontrollers 列表中删除 viewcontroller。【参考方案3】:注意:这在 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];
这将它干净地分层在旧标签栏的顶部,并保持其功能。
【讨论】:
以上是关于删除 UITabBarItem的主要内容,如果未能解决你的问题,请参考以下文章
开发环境Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )