我目前正在学习Objective-C,它来自Java的背景,在这里我可以轻松地制作GUI应用程序。因此,我对其中一些问题的思考方式可能有点偏离。这是问题(请原谅)

UIViewController的目的是什么?

让我举一个具体的例子。假设您正在创建使用一堆GUI小部件的单视图应用程序。您可以手工编写代码,也可以使用InterfaceBuilder。在其他语言(例如Java和HTML)中,我总是手动编写代码,并且不使用GUI工具,因为我发现它们不允许我进行所需的自定义。话虽如此,我听说InterfaceBuilder是最甜蜜的(专家是手工完成的吗?)。假设我在XIB文件中布置了一堆小部件,然后想在代码中加载此UIView。

在我看来(我错了吗?),为了正确取消UIView的使用,需要使用UIViewController,但是出于我的应用程序的目的,我没有使用控制器本身(让MVC放在这里一分钟)。那么,我是否必须为此简单的单视图应用程序创建UIViewController?

让我们将其扩展到两个UIView应用程序案例。在这种情况下,我有一个具有两个视图的应用程序,其中一个是完全自定义的,没有任何小部件(我来这里是drawRect),另一个视图是小部件动态的(设置等)。我希望能够交换视图,其中一个是在IB中创建的,另一个是纯代码。我正在创建自定义的UIView,如下所示:

eyesView = [[EyesView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];")

对于小部件视图,我正在使用:

settingsView = (SettingsView *)[[[UIViewController alloc] initWithNibName:@"SettingsView" bundle:nil] view];

但是我似乎无法找到一种无需使用此虚拟UIViewController即可唤醒XIB的方法。这使我回到了最初的问题-UIViewController的目的是什么? Apple包括的一项功能就是让开发人员轻松启动并运行导航窗格及其类似功能(我想不到)吗?

有没有更好的方法来执行所有这些操作?

最佳答案

UIViewController是事实上的Controller类,并且是您的业务逻辑应驻留的位置(在此处或在其他Controller样式类中)。如果您不熟悉Model-View-Controller设计模式,则应阅读有关它的内容。

无论如何,是的,如果要从笔尖反序列化内容,则需要一个充当文件所有者的对象,除了MainMenu.xib之外,该对象几乎肯定是UIViewController的子类。我想不出为什么要忽略UIViewController的任何原因。

从技术上讲,可以使用较低级别的笔尖加载体系结构手动加载笔尖,但是您仍然需要一些对象来充当文件的所有者,并且没有充分的理由这样做,除非您真的很清楚自己要做什么。在做。特别是因为UIViewController为您提供了许多免费赠品,例如它为您管理笔尖中所有根对象的内存,并且如果不使用它,则可以在内存压力下卸载其视图(然后在不使用它时重新加载它)再次访问)。

关于iphone - UIViewController的目的,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/412007/

10-10 21:11
查看更多