【问题标题】:UIView SubView UIButton not responding to touchUIView SubView UIButton 没有响应触摸
【发布时间】:2019-03-30 12:25:05
【问题描述】:

我有一个位于 UIView 子视图内的 UIButton。视图看起来很好,但按钮没有响应触摸。子视图是嵌入到容器视图中的两个独立的 ViewController。

在情节提要上,所有视图、控制器和按钮都启用了用户交互。我还以编程方式启用了子视图的用户交互。

代码如下:

@IBOutlet var showtimeView: UIView!
@IBOutlet var reviewView: UIView!
var viewTwo: UIView!
var viewThree: UIView!

override func viewDidLoad() {
    super.viewDidLoad()

    viewTwo = ShowtimesView().view
    showtimeView.addSubview(viewTwo)
    viewThree = ReviewsView().view
    reviewView.addSubview(viewThree)
    showtimeView.isUserInteractionEnabled = true
    reviewView.isUserInteractionEnabled = true
    viewTwo.isUserInteractionEnabled = true
    viewThree.isUserInteractionEnabled = true


}

@IBAction func segmentChange(_ sender: Any) {

    switch(segment.selectedSegmentIndex) {

    case 0:

        detailsView.isHidden = false
        showtimeView.isHidden = true
        reviewView.isHidden = true

        break

    case 1:

        detailsView.isHidden = true
        showtimeView.isHidden = false
        reviewView.isHidden = true

        break

    case 2:

        detailsView.isHidden = true
        showtimeView.isHidden = true
        reviewView.isHidden = false

        break

    default:
        break

    }

}

还有什么可能会阻止位于子视图内的 UIButton 响应触摸?

编辑:我更改了容器的颜色以检查它是否覆盖了视图控制器。容器没有出现在子视图视图控制器的前面。子视图仍然没有响应触摸。

【问题讨论】:

  • 正如@smartcat 提到的,您的按钮可以被清晰的视图所覆盖。添加视图层次结构的屏幕截图,如 Interface Builder 中所示。

标签: ios swift uiview uibutton subview


【解决方案1】:

解决方法是删除 viewDidLoad 中的代码。由于视图已经通过故事板 segues 嵌入到容器视图中,因此不需要将它们创建为子视图。

【讨论】:

    【解决方案2】:

    如果按钮顶部有另一个视图,例如容器视图和该容器视图中的视图(以及覆盖按钮的该容器视图的任何其他视图),然后触摸事件不会到达那个按钮。

    作为补偿,让容器视图(覆盖您的按钮)和其中的视图都派生自以下视图:

    class PassthroughView: UIView
    {
        override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView?
        {
            let view = super.hitTest(point, with: event)
            return view == self ? nil : view
        }
    }
    

    您可以直接在情节提要中将这两个视图从 UIView 更改为 PassthroughView,然后将上面的类扔到某个地方(我更喜欢它在自己的文件中)。

    【讨论】:

    • 我很确定我需要将子视图创建为子视图,但在 swift 4 中,此选项无法正常工作,因为它们更改了一些代码。
    猜你喜欢
    • 1970-01-01
    • 2023-04-03
    • 2012-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-14
    • 1970-01-01
    相关资源
    最近更新 更多