【问题标题】:IBAction called with sender disabled在禁用发件人的情况下调用 IBAction
【发布时间】:2017-01-27 18:22:19
【问题描述】:

在什么情况下可可在禁用发送方的情况下调用 IBAction?

我有以下代码

- (IBAction)onMuteTap:(UIButton*)sender {
    if (!sender.enabled) {
        // Whatever 1
    }
    // Whatever 2
}

我在Whatever 1 中设置了一个断点,如果我一直按下链接按钮,有时会调用该断点。 这个if 只是为了调试,因为我假设 IBAction 永远不会被禁用的发件人调用,这似乎是一个错误的假设。

只是一个补充信息,我在另一部分代码中明确禁用了该按钮

...
muteButton.enabled = NO;
...

[编辑] 两个代码都在主线程中运行。

The sender has the same address of _muteButton

【问题讨论】:

  • 有代码。无论 1 是任何代码。它实际上是一个 NSLog。
  • 按钮看起来是否被禁用? muteButton.enabled = NO; 是否在主线程上调用? muteButtonsender 是同一个地址吗?
  • 稍后我将关闭视图,因此很难看到。让我尽量不要关闭并查看按钮。两个代码都在主线程上运行。我会检查地址,但即使不是,发件人肯定是被禁用的。我会附上调试器的ss。
  • 当您点击按钮时,它是否看起来被禁用了?禁用的按钮非常明显地被禁用(褪色的文本等)。 — 另外,您说“我稍后会忽略视图,所以很难看到” — that 是什么意思?听起来你没有为我们描述的某种手帕正在发生。
  • 此后该按钮看起来已禁用(我也无法再单击它)。它看起来太像一个竞争条件,但一切都在主线程上运行......

标签: objective-c cocoa uibutton ibaction


【解决方案1】:

IBAction 和其他方法一样。您可以像任何其他方法一样调用它。因此,如果您将禁用的控件作为参数传递:

button.enabled = NO;
[self onMuteTap:button];

你的“发件人被禁用”。

【讨论】:

  • 确实,我不够具体。电话是可可打来的。唯一调用此方法的是 UI。让我编辑我的问题。
猜你喜欢
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
相关资源
最近更新 更多