Pregunta

La referencia de UIKit dice que UIView es una superclase de UIWindow, pero a pesar de esta ascendencia, una UIWindow realmente administra UIViews. Esto me suena muy inusual.

¿Alguien sabe cuáles son los significados de esto en términos de diseño de software?

Muchas gracias.

EDITAR:
Leí el párrafo relacionado en la guía de programación del iPhone. Sin embargo, no pude ver por qué hacen lo contrario: deje que UIWindow sea el padre de UIView. Debe haber algo que obligó a Apple a diseñar la jerarquía de clases de esta manera.

¿Fue útil?

Solución

de http: // desarrollador. apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.html

  

Una cosa que los desarrolladores experimentados de Mac OS X pueden encontrar inusual sobre la clase UIWindow es su herencia. En Mac OS X, la clase principal de NSWindow es NSResponder. En iPhone OS, la clase principal de UIWindow es UIView. Por lo tanto, en el iPhone OS, una ventana también es un objeto de vista. A pesar de su parentesco, generalmente trata las ventanas en el sistema operativo iPhone de la misma manera que lo haría en Mac OS X. Es decir, generalmente no manipula las propiedades relacionadas con la vista de un objeto UIWindow directamente.

EDITAR:

la UIView es algo genérico (proporciona métodos comunes que utiliza para crear todo tipo de vistas y acceder a sus propiedades), mientras que UIWindow es más concreta (la clase define objetos que administran y coordinan las ventanas que una aplicación muestra en la pantalla).

Sé que es un poco vago y creo que solo Apple sabría la razón exacta de esta jerarquía.

http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIWindow_Class/UIWindowClassReference/UIWindowClassReference.html#//apple_ref/occ/cl/UIWindow

  

La clase UIWindow define objetos (conocidos como ventanas) que administran y coordinan las ventanas que muestra una aplicación en la pantalla. Las dos funciones principales de una ventana son proporcionar un área para mostrar sus vistas y distribuir eventos a las vistas.

y http://developer.apple.com/iPhone/library/documentation/UIKit/Reference/UIView_Class/UIView/UIView.html#//apple_ref/occ/cl/UIView

  

La clase UIView proporciona métodos comunes que utiliza para crear todo tipo de vistas y acceder a sus propiedades. Por ejemplo, a menos que una subclase tenga su propio inicializador designado, utiliza el método initWithFrame: para crear una vista. La propiedad del marco especifica el origen y el tamaño de una vista en coordenadas de supervista. El origen del sistema de coordenadas para todas las vistas está en la esquina superior izquierda.

     

Los objetos UIView se organizan dentro de un objeto UIWindow, en una jerarquía anidada de subvistas. Los objetos principales en la jerarquía de vistas se denominan supervistas y los hijos se denominan subvistas. Un objeto de vista reclama una región rectangular de su supervista adjunta, es responsable de todos los dibujos dentro de esa región y también es elegible para recibir eventos que ocurran en ella. Las vistas entre hermanos pueden superponerse sin problemas, lo que permite la colocación de vistas complejas.

Otros consejos

Porque entonces cada UIView tendría propiedades y comportamiento (heredado) que solo tiene sentido para Windows. Eso está mal.

Al revés tiene más sentido: una ventana agrega comportamiento en la parte superior de las vistas. Por lo tanto, puede dibujar, tener límites, contener otras vistas, etc. Pero amplía esto con, por ejemplo, saber cómo renderizar en la pantalla.

En MacOS X, NSWindows no son vistas. Contienen una '' vista raíz '', llamada contentView. Las ventanas de iOS son una composición de NSWindow + su vista raíz.

Cada vista de UIV normal, incluida la vista raíz de la ventana principal, debe tener una vista principal. UIWindow hereda UIView para realizar tareas de una vista principal en una jerarquía de vistas. UIWindow no es una vista normal y tiene sus propias implementaciones de métodos desde la interfaz de UIView.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top