ios uiviewcontroller loadview

ios - ¿Está bien llamar a[super loadView]?



uiviewcontroller (4)

NSViewController intenta inicializar una vista desde una punta en -loadView. Dado que el nombre de su plumilla no está configurado para su controlador, solo le dará una self.view = nil; Supongo que UIViewController funciona de la misma manera.

Entonces debería ser seguro, pero usted es completamente innecesario.

Pensé que nunca debería llamar a [super loadView] pero algo me confunde.

En la descripción de loadView ( referencia de clase UIViewController ) se dice que "Su implementación personalizada de este método no debería llamar super", pero en el ejemplo de ZoomingPDFViewer que dieron, la implementación ZoomingPDFViewerViewController ( ZoomingPDFViewerViewController ) está llamando a "super loadView".

He intentado llamarlo desde mi método loadView y funciona bien, pero no entiendo entonces qué significa no llamar super.


Si crea su ViewController mediante programación, puede llamar a super.loadView() lugar de self.view = UIView(frame: UIScreen.main.bounds) al comienzo de la override func loadView() de override func loadView() para crear su jerarquía de vista. Sin embargo, no debe llamar a super.loadView() y crear su UIViewController.view personalizado al mismo tiempo. Simplemente no me gusta un robot para explicar la documentación de Apple.


Si no tiene una vista creada en su IB, debe llamar a [super loadView] en su código para ver su programa.

En el caso de sus vistas personalizadas, se supone que debe crear una vista con el generador de interfaces, por lo que no necesita llamarla.


Definitivamente no deberías estar llamando [super loadView] . Yo diría que encontró un error en el ejemplo de ZoomingPDFViewer.

Usted anula loadView cuando quiere crear programáticamente la jerarquía de vistas para su controlador de vista (sin usar un xib).

Como señalaste, los documentos indican claramente que no debes llamar super.

Su implementación personalizada de este método no debe llamar super.

Supongo que esto es para evitar cargar tanto desde un xib como crear una vista programada, ya que la base utiliza este método para cargar una vista desde un xib:

Si el controlador de vista tiene un archivo de punta asociado, este método carga la vista desde el archivo de punta.

Tenga en cuenta también que incluso si durante la asignación de su objeto UIViewController pasa nil para el parámetro UIViewController implementación loadView de loadView intentará cargar cualquier xib con el nombre de clase asociado en él.

Un controlador de vista tiene un archivo nib asociado si la propiedad nibName devuelve un valor no nulo, lo que ocurre si el controlador de vista se creó una instancia desde un guión gráfico, si le asignó explícitamente un archivo de punta usando el método initWithNibName: bundle: o si iOS encuentra un archivo de plumilla en el paquete de aplicaciones con un nombre basado en el nombre de clase del controlador de vista. Si el controlador de vista no tiene un archivo de plumilla asociado, este método crea un objeto UIView en su lugar.

La verdadera intención de este método es darle un control total de la construcción de la jerarquía de vistas sin depender del mecanismo de carga de xib incorporado.

Puede anular este método para crear sus vistas manualmente.

Personalmente, loadView si: 1.) El xib que haría para él es realmente trivial o 2.) El diseño del control es muy dinámico, por lo que crear un xib con un diseño estático tiene poco beneficio.