禁用 UIContextualAction

Disable UIContextualAction

我正在尝试禁用我拥有的 UIContextualAction

let picture = UIContextualAction(style: .normal, title:  "  ", handler: { (ac: UIContextualAction, view: UIView, success:(Bool) -> Void) in
    // ...
})
picture.backgroundColor = .blue

我在网上找不到任何东西来启用或禁用它,我仍然希望它存在,只是不想让用户点击它。这可能吗?

我不确定它是否可以开箱即用地禁用,但作为一种解决方法,您可以使用一个全局变量来跟踪是否应启用该操作,然后在该操作的处理程序中进行检查:

var isCamActionEnabled = false // declare globally, if you need to set this from outside the current scope
let picture = UIContextualAction(style: .normal, title:  "  ", handler: { (ac: UIContextualAction, view: UIView, success:(Bool) -> Void) in
    guard isCamActionEnabled else { return }
    // ...
})

I still want it present, just don't want the user to tap on it

您不能阻止用户点击 如果上下文操作图标存在(您会怎么做,伸出手抓住用户的手?)。但是,仅仅因为用户点击上下文操作并不意味着您必须任何响应。

上下文操作对象有一个完成处理程序;如果您不想对点击做出任何响应,请不要在该完成处理程序中执行任何操作。

let picture = UIContextualAction(style: .normal, title:  "  ", handler: { (ac: UIContextualAction, view: UIView, success:(Bool) -> Void) in
    // do nothing
})

但是,我不推荐这种方法;这是极其糟糕的界面。如果用户可以看到某物,则用户希望能够点击它并让它做出响应。什么都不做的按钮会感觉 "broken"。不如做你说不想做的,就是在用户不应该做这个动作的情况下,一开始就不要表现出来。

如果您需要在用户交互后禁用它,您可以禁用视图用户的交互直到下一个事件发生,例如,在我的情况下,我必须禁用 UIContextualAction 以防止双击直到请求已完成:

let picture = UIContextualAction(style: .normal, title:  "  ", handler: { (ac: UIContextualAction, view: UIView, success:(Bool) -> Void) in
    view.isUserInteractionEnabled = false
    // create function with escaping completion handler and enable it again 
    exampleFunction() {
        view.isUserInteractionEnabled = true
    }
})