删除 UITabBarItem

Posted

技术标签:

【中文标题】删除 UITabBarItem【英文标题】:Remove UITabBarItem 【发布时间】:2010-10-27 19:58:01 【问题描述】:

如何从UITabBar 中删除UITabBarItem

我没有尝试任何东西,因为我没有从 Google 搜索或UITabBarUITabBarControllerUITabBarItem 的文档中找到任何东西。

提前致谢! :)

【问题讨论】:

嗨@esqew,你已经尝试了什么? ***.com/questions/how-to-ask 我没有尝试任何东西,因为我没有从 Google 搜索或UITabBarUITabBarControllerUITabBarItem 的文档中找到任何东西。 【参考方案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的主要内容,如果未能解决你的问题,请参考以下文章

Linux_019_删除rm

gorm软删除和硬删除

开发环境Mac 中删除 Python ( 删除 Python 框架 | 删除 Python 应用程序 | 删除 Python 链接 )

linux按年份删除文件?

删除功能的实现(单个删除与批量删除)

vi-vim :删除撤销恢复删除复制删除