2010-06-12 25 views
6

Me gustaría clasificar el UINavigationController para obtener más libertad con respecto a la apariencia del controlador.Pasos en la subclase UINavigationController

Tengo algunos gráficos para las diferentes partes, barras, botones, texto, etc. Mirando el archivo de encabezado UINavigationController recibo poca ayuda, no sé por dónde empezar.

Nunca he subclassed/overridden un componente UIKit antes, parece que es un poco como jugar Sherlock Holmes.

¿Cuál es el enfoque?

¿Cómo sé qué anular para obtener una pieza específica de gráficos "inyectados" en el lugar correcto?

¿Necesito la subclase UINavigationBar, UIBarButtonItem etc. para obtener el aspecto personalizado completo?

¿Cómo puedo saber si algo está fuera de los límites de ser aprobado por Apple?

Espero que alguien pueda señalarme en la dirección correcta, solo he podido encontrar ejemplos de cambio de partes pequeñas del controlador, no una personalización completa mediante subclases. ¿Voy por esto de la manera incorrecta?

Gracias :)

+0

Por lo que vale la pena, es probable que lo hace mejor escribir un controlador de navegación personalizada desde cero. – zoul

Respuesta

8

Usted no debe extenderse UINavigationController.

A partir de iOS 6, esta información no está actualizada. De los documentos de Xcode 5: Generalmente utiliza esta clase tal como está, pero en iOS 6 y posterior puede crear una subclase para personalizar el comportamiento de la clase.

información obsoleta original sigue:

De la documentación:

La clase UINavigationController implementa un controlador de vista especializado que gestiona la navegación de contenido jerárquico. Esta clase no está destinada a subclases. En su lugar, utiliza instancias de él como está en situaciones en las que desea que la interfaz de usuario de su aplicación refleje la naturaleza jerárquica de su contenido.

Es posible que desee considerar la creación de categorías o la subclasificación de su UINavigationBar y crear potencialmente UIButtons personalizados que utilice para crear UIBarButtonItems.

Siempre que lidiar con un componente de interfaz de usuario que se extiende desde UIView lo que usted debe considerar hacer es primordial y subclases

- (void)drawRect:(CGRect)rect 

Hay un montón de ejemplos aquí en stackoverflow o en el sitio de documentación oficial de Apple.

+0

Hola Gracias, puedo ver que al buscar cómo anular hay muchos resultados, pero muy pocos y no buenos al buscar subclases. Hice una categoría en UINavigationBar, esto cambia el fondo. Tendré que hacer esto para UINavigationController, UIBarButtonItem, etc.etc. para cambiar los botones y las fuentes? – RickiG

+0

Hola Ricki, 1. No extiendas UINavigationController ni UIBarButtonItem. 2. Al crear el UIBarButtonItem, use el iniciador initWithCustomView que le permitirá preparar y usar cualquier vista que necesite (en la que puede dibujar cualquier texto, fuente, imagen, etc.). Cheers – nicktmro

+0

Gracias Nick :) Después de haberlo encajado bien en categorías y una clase de utilidad, estoy muy contento de haber tomado el consejo y no intenté construir el mío ni extenderlo. Ahora puedo cambiar titleLabel y background en la barra de navegación y usar mis botones personalizados como BarButtomItems. – RickiG

52

Ahora usted puede subclase UINavigationController, consulte la documentación actualizada:

La clase UINavigationController implementa un controlador de vista especializado que gestiona la navegación de contenido jerárquico. Esta interfaz de navegación permite presentar sus datos de manera eficiente y también facilita que el usuario navegue por ese contenido. Esta clase generalmente se usa tal cual, pero se puede subclasificar en iOS 6 y versiones posteriores.

UINavigationController Class Reference

+0

En realidad, creo que es mejor señalar este cambio en un comentario a la respuesta marcada como "correcta". Creo que lo haré ... – bazzilla

Cuestiones relacionadas