Domanda

Come faccio a rimuovere un UITabBarItem da un UITabBar?

non ho provato nulla, perché non ho trovato nulla da ricerche di Google o la documentazione per UITabBar, UITabBarController o UITabBarItem.

Grazie in anticipo! :)

È stato utile?

Soluzione

UITabBar ha un raccolta NSArray di elementi. Dal momento che la proprietà elementi è un NSArray e non un NSMutableArray , che avrebbe dovuto costruire una nuova NSArray da quello esistente privo di oggetto che si desidera rimuovere, quindi impostare la proprietà elementi per il nuovo array.

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

Altri suggerimenti

I consigli di Mike Caron un'eccezione se avete intenzione di modificare un TabBar che appartiene a un controller.

  

In iOS 3.0 e versioni successive, non si deve   tentare di utilizzare i metodi e   proprietà di questa classe di modificare la   barra delle schede quando è associato con un   bar scheda oggetto controller. Modifica   la barra delle schede in questo modo si traduce nella   lancio di un'eccezione. Invece, qualsiasi   modifiche alla barra delle schede o il suo   articoli dovrebbero avvenire attraverso la barra delle schede   interfaccia controllore. Si può ancora   modificare direttamente un oggetto scheda barra che   non è associato ad una barra scheda   controller.

In questo caso self.tabBarItem=nil lo rimuoverà.

Nota: questo sembra non lavoro in iOS 11. Era ancora bene in iOS 10

.

Questa è una risposta moderatamente orribile, a mio avviso, in parte perché è sovvertire le linee guida di interfaccia umana, ma lo stesso sembra funzionare in modo pulito:

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

che gli strati in modo pulito in cima alla vecchia barra delle linguette, e mantiene la sua funzionalità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top