簡體   English   中英

刪除UITabBarItem

[英]Remove UITabBarItem

我怎樣才能刪除UITabBarItemUITabBar

我沒有嘗試任何東西,因為我沒有從谷歌搜索或UITabBarUITabBarControllerUITabBarItem的文檔中找到任何東西。

提前致謝! :)

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];

它將它干凈地放在舊標簽欄的頂部,並保持其功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM