Dónde crear vistas de forma programática vs usar una punta

He buscado mucho y busqué un par de libros de text, pero lo que realmente apreciaría es una simple explicación de las mejores prácticas para definir las subclasss de UIView en una aplicación de iOS.

  • Si utilizo un xib, ¿dónde puedo agregar / ajustar los controles al comienzo del time de ejecución?
  • Si se está desarrollando mediante progtwigción, ¿debería hacerlo en ViewController (loadView?) O en una subclass UIView por separado? Si este último, ¿cómo puedo especificar que es el owener del file, de modo que si se agrega como una subvista, sabe quién es su controller?
  • ¿Qué colocas en awakeFromNib, loadView, viewDidLoad, UIView.init, UIViewController.init, etc?
  • ¿Qué otros methods usas con frecuencia?

No necesito instrucciones súper específicas. Estoy buscando más una guía de reference rápida que explique qué tipo de código debe vivir en cada uno de los methods disponibles.

Mi práctica es:

  • cree una subclass UIView personalizada en un file separado.
  • en init de UIViewController crea todos los objects que no sean de interfaz de usuario
  • en loadView de UIViewController crea mi UIView personalizada y configúrala como self.view del controller
  • en la vista viewDidUnload de UIViewController (llamada cuando se advierte memory) libera todos los componentes de la interfaz de usuario (mi UIView personalizada)
  • en la liberación dealloc de UIViewController , todos los objects que no son de interfaz de usuario

En mi subclass I de UIView personalizada:

  • crea todas las subvenciones en el método init y suéltala en dealloc
  • en layoutSubviews Configuro los frameworks de las subvistas de esta manera para asegurarme, el marco se configura solo cuando se cambia. Es porque volver a dibujar las subvistas es costoso:
if ( !CGRectEqualToRect(__subview.frame, rect) ) { __subview.frame = rect; } 

Eso es lo que hago en todos los UIViewControllers. No uso IB, todo se crea mediante progtwigción.

¡Espero eso ayude!

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

En viewDidLoad del controller de vista.

Si se está desarrollando mediante progtwigción, ¿debería hacerlo en ViewController (loadView?) O en una subclass UIView por separado? Si este último, ¿cómo puedo especificar que es el owener del file, de modo que si se agrega como una subvista, sabe quién es su controller?

Una vez más, siempre hago esto en viewDidLoad de mi controller de vista, también.

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

De estos, solo me preocupa ver viewDidLoad .

¿Qué otros methods usas con frecuencia?

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

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

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

Hay nibs muy simples como el MainWindow.nib típico, que no tiene contenido localizado y se puede reproducir con una sola línea de código. En tales casos, el código es mucho más rápido que desarchivar la punta.

También hay layouts altamente dynamics que son imposibles de describir como una punta.

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