【问题标题】:Possible to detect if the button Sender was from a Touch Up Inside vs. a Touch Up Outside?可以检测按钮发件人是来自内部修饰还是外部修饰?
【发布时间】:2015-08-10 16:37:13
【问题描述】:

我有一个按钮,我希望它的 Touch Up Inside 和 Touch Up Outside 操作都采用相同的方法。然后我希望该方法能够找出发生了哪个事件,如下所示:

- (IBAction)buttonMethod:(UIButton *)sender forEvent:(UIEvent *)event {
if (event == UIControlEventTouchUpInside)
    NSLog(@"Touch up inside!");

if (event == UIControlEventTouchUpOutside)
    NSLog(@"Touch up outside!");   
}
}

这似乎不起作用,因为触摸事件似乎继承自 UIControl,而 UIControl 与 UIEvent 不在同一个宇宙中。有什么方法可以告诉我的方法是哪个动作导致该方法被调用?

【问题讨论】:

  • 为什么你的内部修饰和外部修饰方法连接到同一个动作?
  • 那你为什么不用两种方法分开呢。
  • 因为这两种方法会做几乎完全相同的事情,除了 Touch Up Outside 会做一件事。如果可以检测到哪种类型的操作称为方法,我更愿意这样做,并且少一个方法和更少的代码。

标签: objective-c cocoa-touch uibutton


【解决方案1】:

将其拆分为两种方法,如果出于某种原因您希望您的逻辑只包含一个方法,只需传递消息即可。

- (IBAction)buttonMethod:(UIButton *)sender forEvent:(UIEvent *)event controlEvent:(UIControlEvents)event {
    if (event == UIControlEventTouchUpInside)
        NSLog(@"Touch up inside!");

    if (event == UIControlEventTouchUpOutside)
        NSLog(@"Touch up outside!");   
}

- (IBAction)buttonUpInside:(UIButton *)sender forEvent:(UIEvent *)event {
    [self buttonMethod:sender forEvent:event controlEvent:UIControlTouchUpInside];
}

- (IBAction)buttonUpOutside:(UIButton *)sender forEvent:(UIEvent *)event {
    [self buttonMethod:sender forEvent:event controlEvent:UIControlTouchUpOutside];
}

【讨论】:

  • 重点是我想避免添加无关的方法和代码,如果我不需要的话。我知道我可以有不同的方法,但我试图避免它。如果无法检测到按钮事件的类型,那么我将关闭此问题。
  • 那你就不走运了。 (故意)无法从操作方法中获取事件类型。
  • 警告:重新定义方法参数“事件”。错误:多余的右大括号 ('}')。
猜你喜欢
  • 2017-05-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-06
  • 1970-01-01
  • 2012-10-11
  • 2015-11-12
相关资源
最近更新 更多