sheet human guidelines buttons bar apple iphone xib

human - MĂșltiples vistas dentro de un XIB-iPhone SDK



navigation bar ios (3)

Es una cuestión de optimización de memoria y tiempos de carga. Si coloca todas sus vistas en un XIB, entonces cuando su aplicación se inicie, debe cargar todo el XIB en la memoria y construir todos los objetos para todos los controles, y esto requiere una cantidad de tiempo no trivial.

Si, por el contrario, separa sus vistas en XIB independientes, entonces su aplicación se iniciará mucho más rápido, ya que solo se cargará el XIB que contiene la vista inicial y también utilizará menos memoria al principio. Luego, cuando la vista cambia, puede cargar el XIB que contiene la nueva vista de forma perezosa. Esto supondrá un problema menor al abrir una vista por primera vez. Si realmente está tratando de optimizar el uso de la memoria, también puede descargar la vista anterior al cambiar de vista, pero no lo recomendaría, ya que esto provocará un problema cada vez que cambie de vista, en lugar de la primera vez que lo haga. a cualquier vista dada.

He pasado tiempo aprendiendo a usar el iPhone SDK. He leído " Principio de desarrollo de iPhone: Explorando el iPhone SDK " de principio a fin y nunca he visto un ejemplo de múltiples vistas dentro de un XIB.

Para ilustrar lo que quiero decir, aquí hay una captura de pantalla de un XIB con la configuración simple de lo que me refiero:

texto alternativo http://theopensourceu.com/wp-content/uploads/2009/04/one-xib-multiple-views.png

Me imagino que tiene que haber una razón muy específica para no haber visto esto nunca. En los ejemplos de Apple y en todas mis lecturas hasta ahora, se utilizan varios XIB con una sola ''vista'' (y, a veces, el controlador de navegación o un controlador de la barra de pestañas, etc.). ¿Cuál es la razón para esto? ¿Debo evitar múltiples vistas dentro de un XIB? ¿Cuáles son las ventajas o desventajas de cualquiera de los métodos?

Gracias de antemano


Esta es una advertencia para cualquiera que intente implementar horizontal y vertical con dos vistas en un solo XIB (iOS 4 con Xcode 4). La principal desventaja de tener dos vistas en un solo XIB, para mí, era que solo se puede conectar un solo objeto UIOutlet en un XIB a un solo objeto UIOutlet en un controlador de vista.

Así, por ejemplo, si tiene un XIB con una vista para el paisaje y una vista para el retrato, y ambas vistas contienen los mismos objetos de interfaz en diferentes posiciones (como una UILabel en el paisaje y una UILabel en el retrato). No es posible vincular la UILabel en su vista vertical y el objeto UILabel en la vista horizontal a un solo objeto UILabel en el controlador de vista al mismo tiempo .

Me parece una decepción, ya que la documentación de iOS UIViewController (iOS 4.3) sugirió que podría implementar vistas de paisaje y de retrato personalizadas cambiando programáticamente entre dos vistas a medida que la pantalla gira.

Después de dedicar bastante tiempo a descubrir cómo hacer esto, descubrí que es posible tener dos vistas diferentes conectadas a un solo controlador de vista, pero es necesario tener salidas para ambas vistas. Por ejemplo, en mi controlador de vista, tengo dos objetos UILabel (uno para conectarse a un UILabel en la vista vertical; uno para conectarse a un UILabel en la vista horizontal). En mi código, cada vez que actualizo la salida de paisaje, también actualizo el paisaje vertical.

No es muy elegante, pero funciona, y como esto es para una vista simple con una pantalla, no utilizará demasiada memoria para tener todos los objetos de la interfaz de usuario duplicados en el controlador y las vistas. No volvería a crear un proyecto que lo hiciera de esa manera, pero fue una buena solución para ese proyecto.


Siguiendo con la respuesta anterior, hay ocasiones en las que le gustaría cargar varias vistas al mismo tiempo. Aquí hay un ejemplo: está mostrando un informe con varias páginas y va a utilizar un UIScrollView para administrarlos. Cuando el usuario haya terminado de navegar por el informe, cerrará el informe que descartará la vista.

Cree un UIScrollView en un XIB junto con un UIView para cada página que necesite. Como las vistas UIV forman parte del XIB, se cargarán juntas en la memoria, todas al mismo tiempo, cuando se abra el informe. Cree dos UIViewControllers y utilícelos para mostrar la página que se está viendo y en la que se está desplazando. A medida que el usuario se desplaza por las páginas, reutilice UIViewController en la página que se está desplazando para mantener la página a la que se está desplazando.

Esto asegurará un gran rendimiento mientras el usuario está hojeando las páginas. Carga todas las páginas a la vez en la memoria. Solo uso dos UIViewControllers, y solo cambia las vistas que hay en ellas y las mueve.

Esto también tiene la gran ventaja de tener todas las páginas en un XIB. Facilita la edición y la carga de archivos XIB por separado. Solo debes asegurarte de tener la memoria para cargar todas las páginas a la vez. Si es contenido estático (como en mi caso) es una gran manera de ir.

Si está buscando un buen ejemplo de cómo hacer esto, encontré que este recurso es un excelente punto de partida:

http://cocoawithlove.com/2009/01/multiple-virtual-pages-in-uiscrollview.html