ios - 在 iOS 中正确使用 View Controller 和 MVC 模式

标签 ios objective-c model-view-controller

我经常看到在 Internet 上发布的代码示例,其中在 iOS 的生命周期方法内的 View Controller 内将一些 View 添加到 ios 的 Root View 。

- (void)viewDidLoad 
{
 [super viewDidLoad];

 // Slider 1

 slider = [[[DCSlider alloc] initWithDelegate:self]];
 slider.tag = 0;
 slider.frame = CGRectMake(0,0,20,100);
 [slider addTarget:self action:@selector(controlBassValueDidChange:) forControlEvents:UIControlEventValueChanged];
 [self.sliderContainer addSubview: slider];

 // Slider 2 

 slider2 = [[[DCSlider alloc] initWithDelegate:self]];
 slider2.tag = 1;
 slider2.frame = CGRectMake(0,0,20,100); 
 [slider2 addTarget:self action:@selector(controlBeatValueDidChange:) forControlEvents:UIControlEventValueChanged];
 [self.sliderContainer2 addSubview: slider2]; 
}

但是,它不会破坏 MVC 模式吗?

因为根据我的理解,ViewControllers 应该只是 Controller ,不应该直接参与 View 修改相关的事件。有没有办法在单独的 View 和 Controller block 中构建代码?

最佳答案

好问题。

不,它不会破坏 MVC 模式。

Controller “管理” View ,当然可以有很多;他们可能正在操纵数据以通过 View 呈现它;他们可能正在操纵由它管理的 View 的定位;或者他们可以构建这些观点本身的呈现方式——这包含了“管理”的含义。在这个定义中,我认为可以肯定地说 Controller 应该在不破坏 MVC 模式的情况下直接参与 View 修改。

Controller 中的 addSubview: 方法可以! Controller 通过添加一个由同一 Controller 管理的 subview 来“管理”其下的 View 。

当然,如果 View 层次结构很复杂,并且如果许多 View 独立于 Controller 执行特定任务,您认为可以模块化,您可以为它们提供自己的 Controller 并将它们添加为子 Controller 而不会中断任何模式。

关于ios - 在 iOS 中正确使用 View Controller 和 MVC 模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29107384/

相关文章:

ios - 为什么身份验证不适用于我的 ASP.NET REST API?

ios - Xcode更新后多个库和包含文件出错

iphone - 在Uitableview上加载数据滚动

android - 从 MVC Web 应用程序链接到 Apple Wallet 或 Android Pay

ios - 如何按线程过滤 Profiler Instrument

ios - UITableView Objective-C无法正确填充

ios - UITableView 静态单元格的行数改变了

objective-c - 向应用商店添加新版本

java - Java中多个MVC Controller 共享的单例资源

ios - 关闭 2 个 ViewController