Pergunta

Como posso remover um UITabBarItem a partir de um UITabBar?

Não tentei nada, porque não encontrei nada do Google pesquisas ou da documentação para UITabBar, UITabBarController, ou UITabBarItem.

Desde já, obrigado! :)

Foi útil?

Solução

Uitabbar tem um Nsarray coleção de itens. Como a propriedade de itens é um nsarray e não um NsmutableArray, você teria que construir um novo NSARRAY a partir do existente, desprovido do objeto que deseja remover e definir a propriedade Itens para a nova matriz.

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

Outras dicas

Conselho de Mike Caron vai jogar uma exceção Se você pretende modificar um tabbar que pertence a um controlador.

No iOS 3.0 e posterior, você não deve tentar usar os métodos e propriedades desta classe para modificar a barra de guias quando estiver associada a um objeto de controlador de barra de guia. Modificar a barra de guias dessa maneira resulta no lançamento de uma exceção. Em vez disso, quaisquer modificações na barra de guias ou seus itens devem ocorrer através da interface do controlador da barra de guias. Você ainda pode modificar diretamente um objeto de barra de guia que não está associado a um controlador de barra de guia.

Nesse caso self.tabBarItem=nil irá removê -lo.

Nota: parece não funcionar no iOS 11. Ainda era bom no iOS 10.

Esta é uma resposta moderadamente horrível, na minha opinião, em parte porque está subvertendo as diretrizes da interface humana, mas da mesma forma que parece funcionar de maneira limpa:

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

Isso o coloca de maneira limpa em cima do antigo tabbar e mantém sua funcionalidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top