2010-10-27 14 views
5

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

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

¡Gracias de antemano! :)

+0

Hola @esqew, ¿qué has intentado ya? http://stackoverflow.com/questions/how-to-ask – jcolebrand

+0

No he intentado nada, porque no he encontrado nada en las búsquedas de Google ni en la documentación de 'UITabBar',' UITabBarController', o 'UITabBarItem'. – esqew

Respuesta

9

UITabBar tiene NSArray colección de elementos. Como la propiedad de elementos es un NSArray y no un NSMutableArray, debe construir un nuevo NSArray del existente sin el objeto que desea eliminar, luego establecer la propiedad de los elementos en el nuevo conjunto.

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

Recuerda, '- [NSArray mutableCopy]' es tu amigo. Además, no pase por alto '- [UITabBar setItems: animated:]'. –

+0

http://developer.apple.com también es su amigo;) –

4

consejos de Mike Caron will throw an exception 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 intento de utilizar los métodos y propiedades de esta clase de modificar la barra de pestaña cuando se asocia con un objeto controlador de barras pestaña. Modificando la barra de pestañas de esta manera se produce el lanzamiento de una excepción. En su lugar, cualquier modificación de en la barra de pestañas o sus elementos debe realizarse a través de la interfaz del controlador de la barra de pestañas. Todavía puede modificar directamente un objeto de la barra de pestañas que no está asociado con una barra de pestañas controlador.

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

+0

En iOS 11, self.tabBarItem = nil solo hace que el punto de espera esté vacío, en realidad no mezcla los elementos para llenar el elemento "eliminado". :( –

+1

https://stackoverflow.com/a/9908361/856925 tiene una respuesta que todavía funciona: elimine viewcontroller de la lista tabbarcontroller viewcontrollers. –

0

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

Ésta es una respuesta moderadamente horrible, en mi opinión, en parte porque es subvertir las directrices de interfaz humana, pero todos el mismo que 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.

Cuestiones relacionadas