2011-10-12 12 views
9

En mi aplicación que funciona bien en iOS 4 navigationbar dissappeared a partir de iOS 5. Esto es lo que imaginé problema causado: Me estaba quitando subvistas en el método RootViewController viewWillAppear:iOS 5 UINavigationBar eliminación subvistas (imagen subvista) elimina la barra de navegación

for(UIView* view in self.navigationController.navigationBar.subviews) 
    { 
     if ([view isKindOfClass:[UILabel class]]) 
     { 
      [view removeFromSuperview]; 
     } 
     if([view isKindOfClass:[UIImageView class]]) 
     { 
      [view removeFromSuperview]; 
     } 
    } 

Estaba haciendo esto porque el controlador de segunda vista que presiono sobre el controlador de navegación agrega la imagen y la etiqueta a la barra de navegación, que tengo que eliminar cuando aparece la vista. En iOS 5, el código anterior elimina la barra de navegación. ¿Cómo solucionar esto o la forma correcta de hacerlo para soportar tanto iOS4 como iOS 5?

Respuesta

6

setTag para esas imágenes y uilabel luego quitándolo del código anterior hizo el truco.

for(UIView* view in self.navigationController.navigationBar.subviews) 
{ 
    if(view.tag == 9 || view.tag == 99) 
    { 
     [view removeFromSuperview]; 
    } 
} 
+0

Sí, esto funcionará técnicamente, pero su código será mucho menos comprensible si usted u otra persona necesita volver más tarde. Corre el riesgo de no poder leer de manera efectiva y hacer un seguimiento de lo que está haciendo su código. Por lo menos, cree esas constantes de etiquetas para ayudar a ver lo que está eliminando. – RPeck

+0

Puede simplemente eliminar la subvista usando el siguiente código [(UILabel *) [self.navigationController.navigationBar viewWithTag: yourViewTag] removeFromSuperview]; – Himanshu

0

Puede hacer que sus subclases agreguen vistas de sus respectivas clases de UIKit y compararlas con esas subclases específicas. Realmente, para tener el código más claro y legible, debe subclasificar el controlador de navegación y la barra de navegación para permitir que se dibuje una imagen y una etiqueta personalizadas de manera que simplemente pueda establecer la imagen de fondo y la etiqueta de primer plano en cero. Tomaría un poco de tiempo para armar, pero el resultado final sería mucho más extensible.

Cuestiones relacionadas