在iOS中正确使用viewcontrollers和MVC模式

Nav*_*Nav 4 model-view-controller objective-c ios

我经常看到代码示例在整个互联网上发布,其中一些视图被添加到iOS中的生命周期方法内的视图控制器中的ios中的根视图中.

- (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]; 
}
Run Code Online (Sandbox Code Playgroud)

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

因为根据我的理解,ViewControllers只应该是控制器,不应该直接参与视图修改相关的活动.有没有办法在视图和控制器的单独块中构建代码?

avi*_*ara 5

好问题.

不,它不会打破MVC模式.

控制器"管理"视图,当然可以是很多; 他们可能正在操纵数据以通过视图呈现它; 他们可能正在操纵由其管理的观点的定位; 或者他们可以构建这些观点本身的呈现方式 - 其中包含"管理"的含义.在这个定义中,我认为可以安全地说控制器应该直接参与视图修改而不破坏MVC模式.

addSubview:控制器内的方法还可以!控制器通过添加子视图来"管理"其下的视图,子视图又由同一个控制器管理.

当然,如果视图层次结构很复杂,并且如果很多视图正在执行独立于控制器的特定任务,您认为可以将其模块化,您可以为它们提供自己的控制器并将它们添加为子控制器而不会破坏任何模式.