2010-09-23 16 views
8

El Apple documentation proporciona la siguiente advertencia sobre el uso de View Controllers para administrar parte de una pantalla.¿Cómo hace Apple que sus controladores contengan otros controladores?

Nota: No se debe utilizar la vista controladores para administrar vistas que llenan sólo una parte de su ventana, es decir, sólo una parte de la zona definida por el rectángulo contenido aplicación. Si desea tener una interfaz compuesta de varias vistas más pequeñas, incrústelas todas en una sola vista de raíz y administre esa vista con su controlador de vista.

Ahora, lo extraño es que Apple rompe este consejo. UITabBarController, UINavigationController, UISplitViewController todo va en contra de este consejo. Hay una discusión sobre el Apple forums sobre qué puede salir mal si ignora este consejo.

Encontré un tutorial sobre cómo hacer esto, pero el método tenía un problema con overlapping the status bar que tenía una solución que parecía un poco dudosa. Otras preguntas tienen solutions that appear kind of dodgy o advise against doing it.

Así que, dada la pregunta, ¿qué método usa Apple para sus propios controladores?

+0

¿Puede publicar el enlace a la referencia? Siempre creo viewController para vistas pequeñas a pesar de que llenan o no llenan la pantalla. Quisiera verificar las consecuencias y las buenas prácticas, publique el enlace. . . –

+0

@Raj: Agregué un enlace en la parte superior de mi pregunta – Casebash

Respuesta

4

También dicen que no se utilicen agrupaciones de liberación automática, pero hay autorelease declaraciones en todas sus muestras. Quédate con lo que es práctico. La pureza probablemente sea ligeramente secundaria.

3

Apple escribió UIKit, por lo que pueden hacer lo que quieran.

Hay muchas cosas sucediendo bajo el capó:

  • vista {Will, Did} {aparecer, desaparecer}
  • Ver rotaciones (uf, dolor de cabeza)
  • UIViewControllerWrapperView, que es a veces la padre de UIViewController.view. O algo.
  • UIViewController.navigationController/tabBarController/parentViewController/modalViewController
  • Los popovers son raros. No estoy seguro de cómo encajan en.

Si usted escribe sus propios puntos de vista, es probable que pueda salir con el uso UIViewController para controlarlos , pero no espero que todo el comportamiento mágico que da a UIKit un controlador de vista "apropiado".

EDIT: Probablemente no deba StackOverflow cuando sea tarde. Realmente me refiero a algo como esto:

Si una vista está controlada por un UIViewController, el controlador de vista debería existir en la jerarquía del controlador de vista (es decir, funciones como presentModalViewController:animated:). Esto permite que UIKit maneje los bits complicados.

Cuando utiliza algo como [fooSubview addSubview:viewController.view], UIKit puede no hacer todas las cosas que se supone que debe hacer. ¿Qué conserva viewController? ¿Qué sucede si hay una advertencia de memoria y se descarga FooSubview?

Si configura algo como viewController.view.frame = (CGRect){{0,0},{320,480}}, también está buscando problemas: UIViewController establece el marco según la barra de estado/navegación/tabulación/etc. actual.Podría volver a configurarlo, o podría usar el marco para decidir cómo diseñar los controladores de vista que presionas en la parte superior (he notado este comportamiento; es complicado). Si cambia viewController.view.transform, pueden ocurrir cosas extrañas en las rotaciones de vista, ya que la transformación de vista es lo que UIViewController usa para la orientación (junto con la barra de estado y un montón de otras cosas).

Sólo hay una excepción bien soportado que conozco:

[window addSubview:viewController.view]; 
[window makeKeyAndVisible]; 

(De hecho, usted puede pegarse viewController.view dentro de una vista de ventana completa dentro de la ventana; no estoy seguro de cómo funciona .)

Creo que en OS 4.0+ se supone que debes configurar window.rootViewController = viewController en su lugar.

+0

Los controladores de Apple funcionan con cualquier vista – Casebash

Cuestiones relacionadas