iOS应用程序是否需要View Controllers?

时间:2015-05-13 14:28:08

标签: ios objective-c iphone uiview uiviewcontroller

我一直在研究iOS应用程序结构,几乎了解了MVC范例,包括代理,视图和控制器。然后我在网上看到一个例子,它只包含一个AppDelegate文件,没有视图,视图控制器或nib文件,它可以工作:

    @implementation AppDelegate

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

        self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
        self.window.backgroundColor = [UIColor whiteColor];

        CGRect bounds = self.window.bounds;
        view = [[UIView alloc] initWithFrame: bounds];
        [view setBackgroundColor: [UIColor yellowColor]];
        [self.window addSubview: view];

        CGRect labelFrame = CGRectMake(30, 30, 100, 30);
        label = [[UILabel alloc] initWithFrame: labelFrame];
        [label setText: @"My Label"];
        [label setTextAlignment: NSTextAlignmentCenter];
        [label setTextColor: [UIColor orangeColor]];
        [view addSubview: label];

        CGRect buttonFrame = CGRectMake(vCentre - 50, hCentre - 20, 100, 30);
        button = [[UIButton alloc] initWithFrame: buttonFrame];
        [button setTitle: @"My Button" forState: UIControlStateNormal];
        [[button titleLabel] setTextAlignment: NSTextAlignmentCenter];
        [button setTitleColor: [UIColor redColor] forState: UIControlStateNormal];
        [view addSubview: button];

        [button addTarget:self action:@selector(buttonClicked:) forControlEvents: UIControlEventTouchDown];

        [self.window makeKeyAndVisible];

        return YES;
    }

如果没有设置任何视图控制器或根视图控制器,这是如何工作的?这是否意味着不需要视图控制器?

5 个答案:

答案 0 :(得分:1)

您可以在Interface Builder中设计应用程序并连接所有插座。或者您可以在代码中设计窗口,标签等。

这会创建一个填充屏幕的窗口:

self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

然后你添加一个视图:

[self.window addSubview: view];

还有一个标签:

[view addSubview: label];

最后,显示窗口:

[self.window makeKeyAndVisible];

答案 1 :(得分:1)

虽然不需要使用视图控制器,但它们可以弥补应用程序的非常逻辑划分。它们还便于使用故事板来实现应用程序用户界面的图形设计。

这个特殊的例子只是在屏幕上绘制了几个元素,根本无法进行交互。

答案 2 :(得分:1)

正如您在此处所看到的,这背后的开发人员直接从代码创建所有视图。您可以这样做,因为您可以在一个视图控制器中执行所有逻辑而无需任何模型。事实上,您可以根据需要创建应用程序。如果需要,您可以在Web视图中使用html和css创建整个应用程序。 Objective-c或任何其他语言没有限制。如果您想违反代码中的任何原则,您可以这样做。

最佳实践的来源。你不应该在App代理中创建所有内容,你不应该只有一个故事板(我对团队工作的看法),基本上你应该使用事实证明,这是开发和管理应用程序的好方法。

还有一点,请注意此代码只创建一个视图和一个标签。如果你想在你的函数中创建WHOLE应用程序,那么这段代码真的很大。想象成千上万行,你必须找到一个bug。那真的很难。

答案 3 :(得分:1)

正如你所说,MVC是一种范式。这是一种设置代码的方法,使其具有良好的内聚力和低耦合性。您在逻辑上布置代码,以便业务逻辑在模型中,显示在视图中,连接内容在控制器中。 Apple在使用他们的代码时非常努力,但从技术上讲,只有视图是应用程序所必需的,因为您仍然需要在屏幕上显示内容。

此代码只创建窗口,然后向其添加一个视图,该视图显示已以编程方式设置的一些内容。它有效但不是很好的做法,因为您不希望将您的视图代码耦合到您的应用代理。

答案 4 :(得分:1)

是的,根本不需要UIViewController

您可以选择一些SVG作为背景使用,并添加一些按钮或UIWebView来添加功能和其他UIKit元素。

请记住,这是一种未经推荐且难以维护的做法。如果您有数十个视图,那么开始使用UIViewController可能是个好主意。 阅读代码的其他人将很难理解它,没有人真的会对此感到高兴。