ios - UIView SubView UIButton 不响应触摸

标签 ios swift uiview uibutton subview

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

在 Storyboard上,所有 View 、 Controller 和按钮都启用了用户交互。我还以编程方式为 subview 启用了用户交互。

代码如下:

@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

    }

}

还有什么可以阻止位于 subview 内的 UIButton 响应触摸?

编辑:我更改了容器的颜色以检查它是否覆盖了 View Controller 。容器没有出现在 subview View Controller 的前面。 subview 仍然不响应触摸。

最佳答案

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

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

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

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

关于ios - UIView SubView UIButton 不响应触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52996921/

相关文章:

ios - 透明 View 是黑色的?

ios - 如何在导航栏上添加滑动菜单关闭按钮

ios - 当字符长度发生变化时,让 UILabel 在 UIView 中居中。 iOS, Objective-C

ios - 当 UITableViewController 的子类包含在 subview 中时,它不会触发 didSelectRowAtIndexPath,我该如何解决这个问题?

IOS 应用程序更新有 2 个 iOS 分布式证书,但未安装其私钥

ios - 如何使用正则表达式删除字符串中间的新行

ios - 如何在 swift 4 的 didSelectItemAt IndexPath 中的数组中嵌入字典类型数据?

ios - 标题和消息之间的操作表空间?

iOS GHUnit 和核心数据

ios - uploadTaskWithRequest 后台 session fromFile 崩溃