5

我对 MVC 和 iOS 开发有点陌生,我似乎无法调和 UI 样式如何适应这种范式。

我对 MVC 的看法是使用故事板构建的,我可以通过 Xcode 的属性检查器应用原始样式,但任何更复杂的事情我都必须使用 Controller 来设置样式。例如:

- (void) viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated]; // required

    // set background color of view
    [[self view] setBackgroundColor:[UIColor darkGrayColor]];
}

这似乎明显违反了 MVC,因为我在控制器代码中应用了样式逻辑。我发现这类似于编写 HTML 应用程序,而不是使用样式表,而是编写代码以在 JavaScript 中本地应用样式。这是iOS的弱点还是我做错了?

4

4 回答 4

2

取自Apple 的文档

一些控制器对象也可能告诉视图对象改变其外观或行为的一个方面

并且它确实有意义,因为视图应该是被动的,并且仅将应用程序状态反映为 UI,如果需要根据用户操作更改其某些内容,控制器将“告诉”视图。(例如背景变化、控件的可见性等...)

于 2013-07-10T17:00:14.877 回答
1

实际上,屏幕是您的“视图”,而您的“控制器”正在向您的视图发送一条消息,以使用不同的颜色作为背景。

如果您有一个保存屏幕颜色的数据对象,那可能是您的“模型”。在这种情况下,您将通过控制器将数据从模型传递到视图。

于 2013-07-10T16:57:11.413 回答
0

您可以在代码中混合和匹配两者。如果你愿意,你甚至可以在控制器中操作模型细节。MVC 在模式的一般准则中并未严格执行,但如果您想忠于范式,您只需避免在 C 中使用 M 或 V。

视图需要形式的外观和美学以及样式,但最重要的是,您可以从控制器操纵这些方面......

于 2013-07-10T16:56:54.283 回答
0

正如其他人所说,如果您将颜色和样式理解为数据,则可以让控制器处理它。

但您也可以继承 UIviews 并在内部设置样式。

比方说,你有一个TrafficLightView : UIViewwith a property id trafficLight。您可以覆盖设置器并根据对象的状态设置视图的背景颜色。trafficLight.

于 2013-07-10T17:07:56.743 回答