Max*_*Max 3 model-view-controller cocoa cocoa-touch ios
我正在重构我的应用程序,以确保它符合MVC.我想拆分控制器(扩展UIController的MyController)和视图(扩展UIView的HomeView)我在myController中设置视图
self.view = [[HomeView alloc] init];
Run Code Online (Sandbox Code Playgroud)
当我按下UIButton时,在视图中调用一个方法,在这个方法中我想从控制器调用一个方法.
在我看来
[zenModeBtn addTarget:self action:@selector(touchZenMode:) forControlEvents:UIControlEventTouchDown];
Run Code Online (Sandbox Code Playgroud)
...
- (void) touchZenMode:(id) sender {
[myController playZenMode];
}
Run Code Online (Sandbox Code Playgroud)
但是在视图中引用控制器实际上是一种不好的做法不是吗?
编辑:
所以在我的UIViewController中我做了这个:
- (id) init {
HomeView* myHomeView = [[HomeView alloc] init];
[myHomeView.arcadeModeBtn addTarget:self action:@selector(touchArcadeMode) forControlEvents:UIControlEventTouchUpInside];
self.view = myHomeView;
return self;
}
Run Code Online (Sandbox Code Playgroud)
那是对的吗 ?
与您的控制器交谈的视图没有问题,如此处的一些答案所述.例如,文本字段可以通过定义的委托方法通知其控制器.
但是,您的设计仍然存在严重缺陷.您的视图绝对没有处理按钮本身的业务.你认为视图不应该知道它的控制器的直觉是正确的.
您的控制器应该知道按钮以及如何对其进行反应.这就是为什么控制器有按钮IBOutlet来告诉按钮例如改变其标题或启用状态.它有按钮处理程序来响应UI事件.控制器的工作就是处理这个逻辑.视图的工作是显示标题,灰显或将敲击事件发送回控制器.
您应该在视图中添加的唯一代码基本上是如何绘制自己.一切,不能由控制器来处理.
| 归档时间: |
|
| 查看次数: |
4273 次 |
| 最近记录: |