2009-05-06 163 views
4

的UIKit的參考UIView的說是一個UIWindow的父類,但儘管這樣血統,它是一個UIWindow實際管理UIViews。這聽起來對我來說很不尋常。爲什麼是一個UIWindow一個孩子,也UView的父母?

有誰知道這樣做的significants在軟件設計方面?

非常感謝。

編輯:
我閱讀了iPhone編程指南中的相關段落。然而我不明白他們爲什麼會這樣做:讓UIWindow成爲UIView的父項。肯定有一些東西迫使蘋果以這種方式設計類層次結構。關於UIWindow類是其繼承有經驗的Mac OS X開發

+0

是不是讓你困惑父母/孩子的概念和子類/超類? UIWindows是UIView的子類,但不是它的「孩子」。一個UIWindow具有UIViews作爲子項。 – tml 2013-03-28 10:09:26

回答

5

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

有一件事可能會發現異常。在Mac OS X中,NSWindow的父類是NSResponder。在iPhone OS中,UIWindow的父類是UIView。因此,在iPhone OS中,窗口也是一個視圖對象。儘管它的出身,你通常把在iPhone操作系統windows一樣的,你會在Mac OS X也就是說,你通常不直接操縱的UIWindow對象的視圖相關的屬性。

編輯:

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

因爲那麼每個UIView的將有(繼承)的屬性和行爲,只有有意義的窗戶。這是錯誤的。

另一種方式更有意義:窗口在視圖之上添加行爲。因此,它可以繪製,限制,包含其他視圖等。但是,它可以通過例如知道如何渲染到顯示器來擴展它。

在MacOS X中,NSWindows不是視圖。它們包含稱爲contentView的「根視圖」。 iOS窗口是NSWindow +其根視圖的組成。

0

每個包含主窗口根視圖的常規UIView應該有一個父視圖。 UIWindow繼承UIView以在視圖層次結構中執行父視圖的職責。 UIWindow不是常規視圖,它有自己的UIView界面方法的實現。

相關問題