天天看点

UIWebView体系结构(四)UIWebBrowserView

UIWebBrowserView并不算复杂,主要负责这些工作:

form的自动填充

fixed元素的位置调整

键盘弹出时的视图滚动处理,防止遮挡

各种信息的中转,见_messages变量

提供接口让UIWebView获取信息

为显示PDF时添加页号标签

下面想探讨一下UIWebBrowserView->UIWebDocumentView->UIWebTiledView这样的设计。

从已掌握的信息看,他们的成员变量都是使用private继承,即子类无法直接访问父类的成员变量。他们之间的关系是子类操控父类,基类的职责不会牵涉和考虑到子类,分工非常明确。由于UIWebDocumentView直接管理WebView,它的职责是有部分属于Controller的行为,例如手势事件。但是UIWebBrowserView的JavaScript手势却完全不干涉UIWebDocumentView的手势,通过别的途径来获取更高优先级的处理权。

总之,通过继承来拆分一个大类,必须做到这样才是可行的,值得借鉴。要拆分大类通常会用组合,但这里就是不用组合的优秀例子。当然,这也要求继承链里不能有分支,即基类不会有多个子类。

继续阅读