1

我正在尝试禁用UIContextualAction我拥有的一个:

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

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

4

3 回答 3

1

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

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 }
    // ...
})
于 2019-02-22T13:56:33.013 回答
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
    }
})
于 2020-04-07T13:04:33.950 回答
0

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

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

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

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

但是,我不能推荐这种方法。这是极差的界面。如果用户可以看到一个东西,用户希望能够点击它并让它做出响应。一个什么都不做的按钮会感觉“坏了”。最好做你说不想做的事情,即在用户不应该执行此操作的情况下,首先不要显示它。

于 2019-02-22T14:12:21.193 回答