禁用UIContextualAction

时间:2019-02-22 13:50:51

标签: ios swift uicontextualaction

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

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

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

3 个答案:

答案 0 :(得分:1)

如果需要在用户交互后禁用它,则可以禁用视图用户的交互,直到发生下一个事件为止,例如,在我的情况下,我必须禁用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
    }
})

答案 1 :(得分:0)

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

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 }
    // ...
})

答案 2 :(得分:0)

  

我仍然希望它存在,只是不想让用户点击它

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

上下文动作对象具有完成处理程序;如果您不想对点击做出任何反应,则不要在该完成处理程序中进行任何操作。

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

但是,我不推荐这种方法。这是非常差的界面。如果用户可以看到事物,则用户希望能够轻按并做出响应。不执行任何操作的按钮将感觉“断开”。最好按照您说的不想做的事情做,也就是说,在用户不应该执行此操作的情况下,请不要首先显示它。