【发布时间】:2015-03-31 08:22:48
【问题描述】:
我正在尝试制作一个干净的 MVC 项目。 那么使用 NSNotificationCenter 的观察者在 UIView 和 ViewController 之间进行通信是好还是坏?
例如在 CustomView.m 我做一个按钮:
- (void) makeSomeButton{
....
[bt addTarget:self action:@(buttonWasClicked) forControlEvents:UIControlEventTouchDragInside];
...
}
- (void) buttonWasClicked {
[[NSNotificationCenter defaultCenter] postNotificationName:@"buttonWasClicked" object:nil];
}
在 viewCotroller.m 中,我在 init 部分添加了观察者:
- (void)viewDidLoad { //
[self.view addSubview: [[CustomView alloc] initWithFrame ...]];
.....
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@(buttonWasClicked) name:@"buttonWasClicked" object:nil];
.....
}
then
- (void) buttonWasClicked{
// button was clicked in customView so do something
}
如果不正确,请解释在 iOS 应用中实现 MVC 模式的正确方法是什么?
【问题讨论】:
-
UIViewController 是“V”图还是“C”图的一部分?我个人更倾向于将其视为 MVC 的“视图”部分的食物链顶端,并认为 MVC 最好通过将“控制”代码转移到其他地方并将 ViewController 视为视图管理员来实现
-
UIViewController 非常类似于 C,视图是 UIView。你的 UIView 子类应该是愚蠢的。
-
啊但是是吗?为什么它的所有钩子都以视图为中心?您的应用程序委托是控制器。当您将模型控制逻辑与视图控制器分离时,它们会突然变成可重用单元,试试吧
标签: ios objective-c design-patterns model-view-controller