Retire UITabBarItem
-
26-09-2019 - |
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! :)
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.