Iphone 我是否滥用UIViewController子类化?
在试图弄清楚为什么我的应用程序中没有调用ViewWillExample时,我遇到了一个可能是我对UIViewController子类的预期用途的严重误解 根据以下文章和本博客的链接:UIViewController子类化应该只在非常特定的情况下发生。最明显的是直接添加到UIWindow或其他Apple创建的自定义控制器(如UINavigationController)时 我当然对将UIViewController子类的视图添加到其他UIViewController子类的视图中感到内疚 事实上,我认为这或多或少是苹果公司实现MVC的全部想法。。。一个VC和下面的其他VC都很高兴地调用了他们的委托方法 如果一个应用程序中有很多视图(根据定义需要控制)来来去去去,并且有很多screenfull,在那篇文章中描述的模型中,每个screenfull应该有一个主VC子类,所有子视图都由自定义控制器控制(恰好控制视图)它们是简单NSObject的子类 在这种情况下,UIViewController只能直接连接到窗口或UINavigationController、UIAbbarController等 在这种情况下,是否保证调用UIVC委托方法?当viewcontroller的视图是另一个VC的子视图时,这与手动调用委托方法有何不同 老实说,这似乎是在浪费时间。ViewDidLoad、ViewDidLoad、viewDidUnload、ViewWillExample、ViewWillExample的自定义实现,更不用说像“视图”这样简单的属性了 所以基本上,要么我完全错了,要么我在白费力气。如果UIViewController子类不能被指望调用ViewWillDisplay,为什么不直接手动调用该方法,然后使用它呢Iphone 我是否滥用UIViewController子类化?,iphone,cocoa-touch,ios,uiview,uiviewcontroller,Iphone,Cocoa Touch,Ios,Uiview,Uiviewcontroller,在试图弄清楚为什么我的应用程序中没有调用ViewWillExample时,我遇到了一个可能是我对UIViewController子类的预期用途的严重误解 根据以下文章和本博客的链接:UIViewController子类化应该只在非常特定的情况下发生。最明显的是直接添加到UIWindow或其他Apple创建的自定义控制器(如UINavigationController)时 我当然对将UIViewController子类的视图添加到其他UIViewController子类的视图中感到内疚 事实上,我
为什么要复制UIViewController的所有感知功能?回答标题问题:是。 所以基本上,我要么 完全错了,否则我疯了 鹅追逐 听起来你完全错了。“视图”一词有几个不同但相关的含义:
- 视图当然是UIView实例或UIView子类的任何对象
- 在MVC的上下文中,“视图”是集体使用的,我们谈论这个或那个是“视图的责任”,即使“视图”实际上是一组对象
- 当谈到视图控制器时,控制器管理的“视图”是控制器视图指向的UIView实例,以及它包含的子视图层次结构
-viewDidLoad
和-ViewWillDisplay
是UIViewController的覆盖点的两个示例,UIViewController是一个用于子类化的类。视图控制器对象本身调用这些方法,使子类有机会在控制器生命周期中的一个有趣的点上采取一些行动
如果UIViewController子类不能
被指望调用视图将出现,
为什么不直接调用这个方法呢
手动操作,可以完成吗
仔细看一看,您会发现提供的大部分功能都与在屏幕上显示视图(即视图层次结构)有关,或者与控制器与“容器”视图控制器(如UINavigationController和uitabarcontroller)集成有关。所有这些对于不管理整个屏幕内容的对象都没有用处
有时会在多个屏幕上复制一组视图,在某些情况下,使用与视图控制器本身分离的对象管理这些视图是很有帮助的。我可以看出,由于UIViewController的-viewDidLoad和类似的方法,您可能会很想使用UIViewController,但这些实际上只是UIViewController功能的一小部分。对其中一个对象调用-presentModalViewController:
意味着什么?或者访问其navigationController
或parentViewController
属性
如果确实希望使用这些方法管理视图控制器视图层次结构的子视图,请创建具有-viewDid[Load | Unload | EXPENCE | ENGINE]和-viewWill[EXPENCE | ENGISE]方法的NSObject子类。您可以创建该类一次,然后根据需要对其进行子类化,并且您的任何“子客户”类都不会包含UIViewController附带的所有额外的、不必要的控制器管理内容
编辑:我想在这里添加一个指向的指针,它为我上面列出的内容提供了很多支持。下面是标题为“视图控制器管理视图层次结构”小节中的相关段落: