【问题标题】:Set The Target and Selector of a Button to Multiple Methods将按钮的目标和选择器设置为多个方法
【发布时间】:2012-02-23 15:41:18
【问题描述】:

我想在按下按钮时添加多个方法作为选择器响应。一个按钮可以有两种方法在按下按钮时被调用吗?

通过研究,我发现,在 Objective-C 编程语言指南中,一个按钮将调用与选择器同名的所有方法。

我希望我的按钮同时执行两个操作:

  1. 播放音频文件
  2. 在数组中显示视图。

    UIBarButtonItem *play = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemPlay 目标:自己 动作:@selector(play:)];

欣赏建议。

谢谢

【问题讨论】:

  • 你能在你打算使用选择器的地方显示代码吗?
  • 总体来说是一个很好的问题。对这个社区很有帮助和完美。我稍微编辑了格式和解释以使其更清晰,但总体而言,这是个好问题。

标签: iphone objective-c methods selector


【解决方案1】:

@selector() 实际上只是返回一个 SEL 值,它只是一个名称(事实上,在引擎盖下,它实际上是一个字符串)。它没有指定任何特定的行为。类在收到选择器时选择如何响应。

你当然可以让一个类实现一个做两件事的方法,并将该方法的选择器设置为控件的操作:

- (void)eatCakeAndIceCream {
    [self eatCake];
    [self eatIceCream];
}

您还可以通过重复调用addTarget:action:forControlEvents: 向控件添加多个操作:

[someControl addTarget:self action:@selector(eatCake) forControlEvents:UIControlEventTouchDown];
[someControl addTarget:self action:@selector(eatIceCream) forControlEvents:UIControlEventTouchDown];

【讨论】:

    【解决方案2】:

    您可以为特定事件指定多个目标-操作对。

    [btn addTarget:self action:@selector(playSound:) forControlEvents:UIControlEventTouchUpInside];
    [btn addTarget:self action:@selector(displayViews:) forControlEvents:UIControlEventTouchUpInside];
    

    【讨论】:

      【解决方案3】:

      每次将目标添加到对象时,它都会创建一个控件对象(也称为“动作消息”)(控件对象属于 UI 控件类型)。此控制对象包含名为“动作选择器”的选择器的名称以及需要调用此选择器的目标。然后,此控制对象与指定的事件绑定(注册)。您可以将多个控件对象绑定到同一个事件。这意味着我可以有 2 个目标和两个选择器绑定到同一个事件。

      例子

      [btn addTarget:oneTarget action:@selector(foo:) forControlEvents:UIControlEventTouchUpInside];
      
      [btn addTarget:twoTarget action:@selector(bar:) forControlEvents:UIControlEventTouchUpInside];
      

      在运行时,绑定到给定事件中的所有这些控制消息将被分派到适当的目标,换句话说,所有这些选择器方法都将在它们各自的目标类对象上调用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-01
        • 2019-04-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多