2012-05-30 9 views
6

He buscado mucho y he explorado un par de libros de texto, pero lo que realmente agradecería es una explicación simple de las mejores prácticas para definir las subclases de UIView en una aplicación de iOS.Dónde generar vistas mediante programación frente al uso de una punta

  • Si utilizo un xib, ¿dónde puedo agregar/ajustar los controles al inicio del tiempo de ejecución?
  • Si construye programáticamente, ¿debo hacer esto en ViewController (loadView?) O en una subclase UIView separada? Si es este último, ¿cómo especifico que es el propietario del archivo para que, si se agrega como una subvista, sepa quién es su controlador?
  • ¿Qué colocas en awakeFromNib, loadView, viewDidLoad, UIView.init, UIViewController.init, etc.?
  • ¿Qué otros métodos usa con frecuencia?

No necesito instrucciones súper específicas. Estoy más buscando una guía de referencia rápida que explique qué tipo de código es el adecuado para cada uno de los métodos disponibles.

Respuesta

5

Mi práctica es:

  • crear la costumbre UIView subclase en archivo separado.
  • en init del UIViewController crear objetos de todos los no-UI
  • en loadView de UIViewController crear mi UIView costumbre y establecerla como self.view del controlador
  • en la UIViewController viewDidUnload (llamados cuando la advertencia de memoria) liberar todos los componentes de la interfaz de usuario (mi UIView personalizado)
  • en UIViewController dealloc liberar todos los objetos que no sean UI

En mi subclase UIView personalizada I:

  • crear todos subvistas en método init y lo liberan en dealloc
  • en layoutSubviews puse los marcos de las subvistas esta manera de asegurar, el marco se establece solo cuando se cambia. Es debido a volver a dibujar de los subvistas es caro:
if (!CGRectEqualToRect(__subview.frame, rect)) { 
    __subview.frame = rect; 
} 

Eso es lo que hago en todas UIViewControllers. No uso IB, todo se crea programáticamente.

Espero que ayude!

+0

Supongo que es algo subjetivo, pero a los pocos meses, esto coincide más estrechamente con lo que estoy haciendo, y funciona muy bien. –

4

Si utilizo un xib, ¿dónde puedo agregar/ajustar los controles al inicio del tiempo de ejecución ?

En viewDidLoad del controlador de vista.

Si la construcción de programación, debería hacerlo en el ViewController (loadView?) O una subclase UIView separada? Si es este último, ¿cómo especifico que se especifique que es el propietario del archivo para que, si se agrega como subvista, sepa quién es su controlador?

De nuevo, siempre hago esto en viewDidLoad de mi controlador de vista, también.

¿Qué se coloca en awakeFromNib, loadView, viewDidLoad, UIView.init, UIViewController.init, etc?

De estos, solo me preocupo por viewDidLoad.

¿Qué otros métodos usa usted más frecuentemente?

  1. Asegúrese de que utiliza máscaras de cambio de tamaño de automóviles para sus controles creados manualmente para asegurarse de que manejan las orientaciones de interfaz de usuario correctamente.

  2. Nunca asuma (como muchos lo hacen), que su pantalla tiene 320pt de ancho. Siempre consulte self.view.size donde necesite el tamaño de la vista actual.

  3. Si sus controles no pueden manejar los cambios de las orientaciones de la interfaz del usuario mediante máscaras de cambio de tamaño automático, asegúrese de usar los iOS 5 viewWillLayoutSubviews para ajustarlos.

0

Hay puntas muy simples, como la típica MainWindow.nib, los cuales no han localizado contenido y se pueden reproducir con una sola línea de código.En tales casos, el código es mucho más rápido que desarchivar el plumín.

También hay diseños altamente dinámicos que son imposibles de describir como una punta.

Debe elegir la forma más conveniente y eficiente en cada caso particular. Siempre habrá compensaciones, solo elija sabiamente.

Cuestiones relacionadas