【发布时间】:2026-01-10 23:50:01
【问题描述】:
我需要在用户点击按钮后立即禁用与其他 ui 元素的所有用户交互。我想防止用户一次触发多个操作,例如按下按钮并点击集合视图中的元素或点击 UIBackBarButton。
例如,我创建了一个调用此方法的 UIBarButtonItem,它禁用 self.view 和 UIBarButtonItems 的用户交互,并在 1 秒后重新启用它们:
- (void)buttonPressed:(id)sender
{
self.view.userInteractionEnabled = NO;
self.navigationItem.backBarButtonItem.enabled = NO;
self.navigationItem.rightBarButtonItem.enabled = NO;
// ... show an alert view
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, 1 * NSEC_PER_SEC), dispatch_get_main_queue(), ^{
self.view.userInteractionEnabled = YES;
self.navigationItem.backBarButtonItem.enabled = YES;
self.navigationItem.rightBarButtonItem.enabled = YES;
});
}
问题是,如果我几乎同时点击此按钮和例如后退按钮,它会显示警报视图并弹出当前视图控制器。 我假设它会等待几毫秒来确定此事件是单点触摸还是多点触摸事件(例如双击),但我不知道如何处理。
如何在用户点击此按钮后立即禁用用户交互?
【问题讨论】:
-
我相信你的行动是在
UIControlEventTouchUpInside。转至UIControlEventTouchDown -
您好,感谢您的回答。我在示例的描述中犯了一个小错误。我实际上创建了一个 UIBarButtonItem 来调用这个方法。而且这不是 UIControl 的继承,所以没有办法改变 UIControlEvents。我更新了问题。
-
我的答案仍将保持不变。创建uibarbutton as uibutton as shown here。现在对于 uibutton,将事件发送到 UIControlEventTouchDown。你完成了:)
-
我认为问题在于
self.navigationItem.backBarButtonItem没有动作或目标,它只是为了外观,您应该创建一个self.navigationItem.leftBarButtonItem并在您触摸按钮时禁用它。
标签: ios objective-c uibutton touch-event