【问题标题】:MVC - button action in view or controller?MVC - 视图或控制器中的按钮操作?
【发布时间】:2013-01-11 19:13:07
【问题描述】:

使用 MVC。我有一个按钮。按钮绘图在视图中。按钮动作应该在控制器中,对吧?如何向按钮添加操作?从视图来看,不应该保留控制器(对于 MVC)的引用,然后是如何设置操作。 按钮是否应该公开并由控制器访问?

或者,按钮应该在控制器中绘制。 (不好)

或者,使用委托(但是 MVC 中的每个视图控制器对都必须有一个委托)

【问题讨论】:

  • 创建一个方法来创建按钮,并在那里传递动作目标的引用或创建委托。
  • 如果按钮的动作要操纵视图本身,则在视图中拥有该功能,否则将其放在控制器中。

标签: iphone ios model-view-controller uiviewcontroller


【解决方案1】:

在视图中使用的按钮上设置目标选择器。并使用选择器方法名称定义一个方法。

例如:

[button addTarget:self action:@selector(YourMethodName) forControlEvents:UIControlEventTouchUpInside]; // Declare this where you are adding button in view.

-(void)YourMethodName // Use this where you need to perform that button action.
{
   // Do what you need.
}

如果您在运行时添加包含该按钮的视图。请尝试另一个技巧。 添加按钮时为该按钮设置标签值。在您的控制器中通过其标签值访问该按钮并在按钮上添加目标。

前;

UIButton *btn = (UIButton*)[self.view viewWithTag:10];
    [btn addTarget:self action:@selector(methodName) forControlEvents:UIControlEventTouchUpInside];

【讨论】:

    【解决方案2】:

    知道了。必须设置 addTarget:nil。该操作将传递给链中的下一个响应者。在这种情况下,视图控制器。

    【讨论】:

      【解决方案3】:

      控制器应该可以访问按钮,以便它可以设置操作。

      例如,您可以像使用 UITableCells 一样进行操作 :) --> 您可以在视图上有一个属性按钮

      但是 这是一个有争议的问题,也取决于个人品味

      【讨论】:

        【解决方案4】:

        也许你可以让按钮成为你的视图的一个属性。或者您可以创建一个公开的视图方法,例如-(void)setupButtonSelector:(SEL)selector;选择器是您的按钮选择器。

        【讨论】:

          【解决方案5】:

          在控制器的标头中创建一个 IBAction:

          -(IBAction)buttonPressed:(id)sender;
          

          现在在 Interface Builder 中将您的按钮连接到此操作(使用 CTRL 从按钮拖动到文件所有者)。

          接下来在控制器的实现中,您可以编写在-(void)buttonPressed:(id)sender中按下按钮时执行的代码

          【讨论】:

          • 如果我不使用 IB 有什么办法吗?
          • 是的,手动创建一个 UIButton,然后使用 addTarget 到您的按钮将按钮链接到您的代码
          • 但是,我必须做 addTarget:myController,我没有,不应该引用 myController
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2015-04-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多