UIView SubView UIButton不能响应触摸

时间:2018-10-25 19:41:46

标签: ios swift uiview uibutton subview

我有一个位于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响应触摸?

编辑:我更改了容器的颜色以检查其是否覆盖了视图控制器。该容器未显示在子视图ViewController的前面。子视图仍然无法响应触摸。

2 个答案:

答案 0 :(得分:0)

如果按钮上方还有另一个视图,例如容器视图,则该容器视图中的视图(以及该容器视图中覆盖按钮的任何其他视图),然后触摸事件不会进入该按钮。

要进行补偿,请使容器视图(覆盖按钮)及其内的视图均源自以下视图:

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,只需将上述类扔到某个地方(我希望将其放在自己的文件中)。

答案 1 :(得分:0)

解决方案是删除viewDidLoad中的代码。由于视图已经通过情节提要脚本嵌入到容器视图中,因此无需将其创建为子视图。