如何UITabBarItem
从 a 中删除 a UITabBar
?
我没有尝试过任何东西,因为我没有从 Google 搜索或UITabBar
、UITabBarController
或UITabBarItem
.
提前致谢!:)
如何UITabBarItem
从 a 中删除 a UITabBar
?
我没有尝试过任何东西,因为我没有从 Google 搜索或UITabBar
、UITabBarController
或UITabBarItem
.
提前致谢!:)
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];
如果您打算修改属于控制器的 tabBar,Mike Caron 的建议将引发异常。
在 iOS 3.0 及更高版本中,当标签栏与标签栏控制器对象关联时,您不应尝试使用此类的方法和属性来修改标签栏。以这种方式修改标签栏会导致抛出异常。相反,对标签栏或其项目的任何修改都应通过标签栏控制器界面进行。您仍然可以直接修改与标签栏控制器无关的标签栏对象。
在这种情况下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];
这将它干净地分层在旧标签栏的顶部,并保持其功能。