如何在UIBarButtonItems&上禁用Multi Touch UI按钮?

时间:2016-11-21 11:02:00

标签: swift uibutton uibarbuttonitem back-button multi-touch

我的应用程序在每个屏幕上都有相当多的按钮以及UIBarButtonItem后退按钮,我遇到了人们可以使用多点击按钮的问题。我一次只需要一个按钮就可以点击。

有没有人知道如何使UIBarButtonItem后退按钮专用于触摸?

我设法通过将每个人的视图设置为isExclusiveTouch = true来禁用多次点击UIButtons,但这似乎并不计入导航栏中的后退按钮。

后退按钮似乎不符合isExclusiveTouch。

有没有人做过一个简单的解决方法,不会对每个按钮发送事件进行编码?

非常感谢,

Krivvenz。

7 个答案:

答案 0 :(得分:3)

您可以启用独占触摸,这样可以在第一次触摸完成之前停止多次触摸

buttton.exclusiveTouch = true

答案 1 :(得分:1)

您可以为UIBarButtonItem编写一个扩展名来添加isExclusiveTouch?

答案 2 :(得分:1)

您可以简单地禁用超级视图的多点触控属性。您还可以在故事板中找到此属性。

enter image description here

答案 3 :(得分:0)

您可以在要禁用多次触摸的场景中尝试此操作。

let skView = self.view as! SKView
skView.isMultipleTouchEnabled = false

答案 4 :(得分:0)

我找到了解决方案。 isExclusiveTouch最终是解决方案,但之所以没有执行任何操作是因为您还需要在要设置为isExclusiveTouch = true的每个按钮的所有子视图上进行设置。然后它按预期方式工作:)

答案 5 :(得分:0)

在Swift中运行正常

self.view.isMultipleTouchEnabled = false
buttonHistory.isExclusiveTouch = true

答案 6 :(得分:0)

除了@Luky Lízal 的回答之外,您还需要注意,您想要禁用多点触控的视图的所有子视图(完全在层次结构中,实际上是子视图的子视图)必须设置为 isExclusiveTouch = true。 您可以像这样递归地遍历所有这些:

    extension UIView
    {
        func allSubViews() -> [UIView] {
            var all: [UIView] = []
    
            func getSubview(view: UIView) {
                all.append(view)
                guard view.subviews.count > 0 else { return }
                view.subviews.forEach{ getSubview(view: $0) }
            }
            getSubview(view: self)
            return all
        }
    }

// Call this method when all views in your parent view were set
    func disableMultipleTouching() {
        self.isMultipleTouchEnabled = false
        self.allSubViews().forEach { $0.isExclusiveTouch = true }
    }