天天看點

UIWebView體系結構(四)UIWebBrowserView

UIWebBrowserView并不算複雜,主要負責這些工作:

form的自動填充

fixed元素的位置調整

鍵盤彈出時的視圖滾動處理,防止遮擋

各種資訊的中轉,見_messages變量

提供接口讓UIWebView擷取資訊

為顯示PDF時添加頁号标簽

下面想探讨一下UIWebBrowserView->UIWebDocumentView->UIWebTiledView這樣的設計。

從已掌握的資訊看,他們的成員變量都是使用private繼承,即子類無法直接通路父類的成員變量。他們之間的關系是子類操控父類,基類的職責不會牽涉和考慮到子類,分工非常明确。由于UIWebDocumentView直接管理WebView,它的職責是有部分屬于Controller的行為,例如手勢事件。但是UIWebBrowserView的JavaScript手勢卻完全不幹涉UIWebDocumentView的手勢,通過别的途徑來擷取更高優先級的處理權。

總之,通過繼承來拆分一個大類,必須做到這樣才是可行的,值得借鑒。要拆分大類通常會用組合,但這裡就是不用組合的優秀例子。當然,這也要求繼承鍊裡不能有分支,即基類不會有多個子類。

繼續閱讀