在下面的应用程序中,我目前使用了三个UIViewControllers:一个主视图控制器,一个用于主菜单,一个用于由主菜单启动的设置屏幕。随着我对UIViewController的工作原理和设计目的的了解越来越多,我开始质疑我的架构是否明智。
在我看来,子类化的主要目的是能够重写在控制器的生命周期中自动调用的方法:viewDidAppear,viewWillAppear,willRotateToInterfaceOrientation等。似乎只有当UIViewController(或其子类)是UIViewController层次结构的一部分时,才会调用这些方法。因此,除非我将使用标准的创建视图控制器层次结构的方法之一,否则没有必要子类化UIViewController,例如UINavigationController,[UIViewController presentModalViewController]等。
我不愿意使用Cocoa风格的添加视图控制器到层次结构的方法,因为它们都似乎非常受限制。例如,我可以使用[UIViewController presentModalViewController]显示我的设置屏幕,但我不想它遮挡整个屏幕。有背景动画,我希望用户能够在设置屏幕可见时与之交互。
以下是我的问题:
1)除非我将其通过Apple的技术之一添加到viewController层次结构中,否则子类化UIViewController是否愚蠢?
2)我的假设是否正确,即内置的显示新视图的方法对我来说太受限制了,为了获得所需的灵活性,我需要通过[view addSubview]加载视图?
3)如果子类化UIViewController对于我的菜单和设置视图没有意义,那么我应该如何避免将所有代码放在一个庞大的UIViewController子类中?我只是应该子类化NSObject,添加适当的IBOutlets和IBActions,并在使用[NSBundle loadNibNamed]加载nib时将其作为文件所有者传递吗?
图片如下:https://istack.dev59.com/DBNFN.webp
在我看来,子类化的主要目的是能够重写在控制器的生命周期中自动调用的方法:viewDidAppear,viewWillAppear,willRotateToInterfaceOrientation等。似乎只有当UIViewController(或其子类)是UIViewController层次结构的一部分时,才会调用这些方法。因此,除非我将使用标准的创建视图控制器层次结构的方法之一,否则没有必要子类化UIViewController,例如UINavigationController,[UIViewController presentModalViewController]等。
我不愿意使用Cocoa风格的添加视图控制器到层次结构的方法,因为它们都似乎非常受限制。例如,我可以使用[UIViewController presentModalViewController]显示我的设置屏幕,但我不想它遮挡整个屏幕。有背景动画,我希望用户能够在设置屏幕可见时与之交互。
以下是我的问题:
1)除非我将其通过Apple的技术之一添加到viewController层次结构中,否则子类化UIViewController是否愚蠢?
2)我的假设是否正确,即内置的显示新视图的方法对我来说太受限制了,为了获得所需的灵活性,我需要通过[view addSubview]加载视图?
3)如果子类化UIViewController对于我的菜单和设置视图没有意义,那么我应该如何避免将所有代码放在一个庞大的UIViewController子类中?我只是应该子类化NSObject,添加适当的IBOutlets和IBActions,并在使用[NSBundle loadNibNamed]加载nib时将其作为文件所有者传递吗?
图片如下:https://istack.dev59.com/DBNFN.webp