我一直在研究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;
}
如果没有设置任何视图控制器或根视图控制器,这是如何工作的?这是否意味着不需要视图控制器?
答案 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)
此代码只创建窗口,然后向其添加一个视图,该视图显示已以编程方式设置的一些内容。它有效但不是很好的做法,因为您不希望将您的视图代码耦合到您的应用代理。
答案 4 :(得分:1)
是的,根本不需要UIViewController
!
您可以选择一些SVG作为背景使用,并添加一些按钮或UIWebView
来添加功能和其他UIKit
元素。
请记住,这是一种未经推荐且难以维护的做法。如果您有数十个视图,那么开始使用UIViewController
可能是个好主意。
阅读代码的其他人将很难理解它,没有人真的会对此感到高兴。