MVC和UIButtons

时间:2012-01-09 16:55:17

标签: objective-c ios model-view-controller

我正在制作一个iPad项目,它动态创建了一些我需要添加到应用程序主视图中的按钮。我正计划从我的ViewController中触发一个存在于我的View中的方法...说它叫做add_buttons。我的印象是,在MVC模式中,视图应该处理按钮的渲染和一般显示,但控制器应该处理交互。我也认为视图“知道”视图控制器的设计很糟糕。

所以我想我的问题是,我的控制器中是否包含按钮敲击逻辑?如果是这样,我该如何处理分离?如果我在视图中创建按钮,那么它必须具有对视图控制器的引用,以用作事件处理程序的委托。如果我在控制器中创建它们,那么我觉得我需要在控制器中设置某些UI元素,这对我来说是错误的。我知道我错过了一些显而易见的东西,但到目前为止,搜索已证明毫无结果。

有人能指出我正确的方向吗?

3 个答案:

答案 0 :(得分:2)

按钮分接逻辑肯定属于控制器。

创建按钮的代码也可能属于控制器。但是,包含一个视图方法是有意义的,该方法返回一个按钮,其外观已配置但不是其行为。

一些普通的诗人:

  • 查看控制器及其视图非常紧密耦合。
  • 如果有疑问,最好将代码放在视图控制器中。
  • 视图界面应处理原始数据类型(例如字符串,数字,图像)。视图不需要知道模型对象的细节。

此外,方法lowerCamelCase的命名约定。例如:add_button应为addButton

答案 1 :(得分:1)

添加按钮进行查看时,

[myButton addTarget:nil action:@selector(myButtonPressed) forControlEvents:UIControlEventTouchUpInside];

在视图控制器中添加

-(void)myButtonPressed {
}
带有target的

:nil事件将由包含此视图的第一个控制器处理

答案 2 :(得分:0)

我最近完成了一个项目,我必须动态创建包含UITextfields和UILabels的UIViews。我遇到这个问题的方法是从视图控制器中调用“addViews”函数。我认为这是一种更好更简单的方法,而不是处理UIView内部的视图控制器。我测试了我的方法并完全正常工作(动态更改UIView大小并添加其他UIViews与UITextfield和UILabel)。