Pregunta

¿Cómo puedo eliminar un UITabBarItem de un UITabBar?

No he probado nada, porque no he encontrado nada de las búsquedas de Google o la documentación de UITabBar, UITabBarController o UITabBarItem.

Gracias de antemano! :)

¿Fue útil?

Solución

UITabBar tiene un colección de artículos NSArray . Dado que la propiedad es un NSArray artículos y no un NSMutableArray , tendría que construir una nueva NSArray de la existente desprovisto del objeto que desea eliminar, a continuación, establezca la propiedad de los elementos a la nueva 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];

Otros consejos

El consejo de Mike Caron arrojará una excepción si tiene intención de modificar una barra de pestañas que pertenece a un controlador.

  

En iOS 3.0 y versiones posteriores, no debería   intente utilizar los métodos y   propiedades de esta clase para modificar el   barra de pestañas cuando se asocia con una   barra de pestañas objeto controlador. Modificando   la barra de pestañas de esta manera da lugar a la   lanzar una excepción. En su lugar, cualquier   modificaciones a la barra de pestañas o su   artículos deben ocurrir a través de la barra de pestañas   interfaz de controlador. Es posible que aún   modificar directamente un objeto de la barra de pestañas que se   no está asociado con una barra de pestañas   controlador.

En este caso self.tabBarItem=nil lo eliminará.

NOTA: esto parece no funcionar en iOS 11. Todavía era buena en IOS 10

.

Esta es una respuesta moderadamente horrible, en mi opinión, en parte porque es subvertir las directrices de la interfaz humana, pero al mismo tiempo parece que funciona limpiamente:

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

Que las capas de forma limpia en la parte superior de la barra de pestañas de edad, y mantiene su funcionalidad.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top