почему UIWindow - дочерний элемент, а также родительский элемент UView? - PullRequest
5 голосов
/ 06 мая 2009

Справочник UIKit говорит, что UIView является суперклассом UIWindow, но, несмотря на это происхождение, UIWindow фактически управляет UIViews. Это звучит так необычно для меня.

Кто-нибудь знает, каково это с точки зрения разработки программного обеспечения?

Большое спасибо.

EDIT:
Я прочитал соответствующий параграф в руководстве по программированию iPhone. Тем не менее, я не мог понять, почему они делают наоборот: пусть UIWindow будет родителем UIView. Должно быть, что-то заставило Apple спроектировать иерархию классов таким образом.

Ответы [ 3 ]

5 голосов
/ 06 мая 2009

из http://developer.apple.com/iPhone/library/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/WindowsandViews/WindowsandViews.html

Одна вещь, которую опытные разработчики Mac OS X могут найти необычным в классе UIWindow, - это его наследование. В Mac OS X родительским классом NSWindow является NSResponder. В iPhone OS родительским классом UIWindow является UIView. Таким образом, в iPhone OS окно также является объектом просмотра. Несмотря на его происхождение, вы, как правило, относитесь к окнам в iPhone OS так же, как в Mac OS X. То есть вы обычно не манипулируете свойствами, относящимися к представлению, объекта UIWindow напрямую.

EDIT:

UIView - это нечто общее (предоставляет общие методы, которые вы используете для создания всех типов представлений и доступа к их свойствам.), В то время как UIWindow является более конкретным (класс определяет объекты, которые управляют и координируют окна, которые приложение отображает на экране.)

Я знаю, что это немного расплывчато, и я думаю, что только яблоко знает точную причину этой иерархии.

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

Класс UIWindow определяет объекты (известные как окна), которые управляют и координируют окна, которые приложение отображает на экране. Две основные функции окна состоят в том, чтобы предоставлять область для отображения его представлений и распространять события для представлений.

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

Класс UIView предоставляет общие методы, которые вы используете для создания всех типов представлений и доступа к их свойствам. Например, если подкласс не имеет своего собственного назначенного инициализатора, вы используете initWithFrame: метод для создания представления. Свойство frame указывает происхождение и размер представления в координатах суперпредставления. Начало системы координат для всех видов находится в верхнем левом углу.

Объекты UIView расположены в объекте UIWindow, во вложенной иерархии подпредставлений. Родительские объекты в иерархии представлений называются суперпредставлениями, а дочерние - подвидами. Объект представления требует прямоугольной области своего охватывающего суперпредставления, отвечает за все рисование в пределах этой области и имеет право на получение событий, происходящих в нем. Близкие представления могут перекрываться без каких-либо проблем, что позволяет размещать сложные представления.

0 голосов
/ 24 мая 2017

Каждый обычный UIView, включая корневой вид основного окна, должен иметь родительский вид. UIWindow наследует UIView для выполнения обязанностей родительского представления в иерархии представлений. UIWindow не является обычным представлением и имеет собственные реализации методов из интерфейса UIView.

0 голосов
/ 17 марта 2011

Потому что тогда каждый UIView будет иметь (унаследованные) свойства и поведение, которые имеют смысл только для окон. Это просто неправильно.

Другой путь имеет больше смысла: окно добавляет поведение поверх представлений. Таким образом, он может рисовать, иметь границы, содержать другие виды и т. Д. Но он расширяет это, например, зная, как визуализировать изображение.

В MacOS X NSWindows не являются представлениями. Они содержат «корневое представление», называемое contentView. Окна iOS - это состав NSWindow + его корневой вид.

...