UITabBarItem
からを削除するにはどうすればよいUITabBar
ですか?
UITabBar
Google 検索や、UITabBarController
、または のドキュメントから何も見つからなかったため、何も試していませんUITabBarItem
。
前もって感謝します!:)
UITabBarItem
からを削除するにはどうすればよいUITabBar
ですか?
UITabBar
Google 検索や、UITabBarController
、または のドキュメントから何も見つからなかったため、何も試していませんUITabBarItem
。
前もって感謝します!:)
UITabBarにはアイテムのNSArrayコレクションがあります。items プロパティはNSMutableArrayではなく NSArray であるため、削除するオブジェクトを含まない既存の 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];
これにより、古いタブバーの上にきれいにレイヤーが配置され、その機能が維持されます。