Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 我怎样才能拥有一个';点击';转到父视图_Ios_Swift - Fatal编程技术网

Ios 我怎样才能拥有一个';点击';转到父视图

Ios 我怎样才能拥有一个';点击';转到父视图,ios,swift,Ios,Swift,我有一个子视图,它是它自己的视图控制器,它覆盖了屏幕的前1/3(就像一个不断更新的信息对话框),我希望屏幕的其他2/3(其中包含一个地图和一个按钮)仍然是可访问的 if (exampleCondition) { if (view.viewWithTag(10) == nil) { let tripStartedViewController = UIStoryboard(name: "Main", bundle: nil

我有一个子视图,它是它自己的视图控制器,它覆盖了屏幕的前1/3(就像一个不断更新的信息对话框),我希望屏幕的其他2/3(其中包含一个地图和一个按钮)仍然是可访问的

if (exampleCondition) {
            if (view.viewWithTag(10) == nil) {

                let tripStartedViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TripInProgressDialog")

                addChild(tripStartedViewController)
                view.addSubview(tripStartedViewController.view)
                tripStartedViewController.view.tag = 10
                tripStartedViewController.didMove(toParent: self)
}
}
这个前1/3是一个对话,只有在特定条件下才会出现,所以它并不总是在那里

我已经说得很清楚了,这样用户仍然可以看到背景,但不确定如何使其使地图和按钮仍然可以访问

if (exampleCondition) {
            if (view.viewWithTag(10) == nil) {

                let tripStartedViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "TripInProgressDialog")

                addChild(tripStartedViewController)
                view.addSubview(tripStartedViewController.view)
                tripStartedViewController.view.tag = 10
                tripStartedViewController.didMove(toParent: self)
}
}

如果这是一个显示的视图控制器,则所有触摸都将路由到此视图和此视图控制器,而不是路由到后面可见视图的视图控制器。你对此无能为力

如果您想要的只是一个覆盖部分屏幕的视图,而不阻止触摸屏幕的其余部分,那么您应该设置一个覆盖部分屏幕的简单视图,而不是整个显示视图控制器

(例如,谷歌iOS版的“toast”,看看toast警报通常是如何实现的。)


如果确实要使用单独的视图控制器,则它需要是主视图控制器的自定义子视图控制器,而不是显示的视图控制器。如果你走这条路,为了让这成为一种真正的亲子关系,你必须做一个精心制作的“儿童舞蹈”;确保您正在跳舞。

您需要忽略透明视图上的触摸,但在其子视图和后面的视图中处理它们。为此,我通常通过将
UIView子类化来覆盖视图的命中测试:

class TransparentTouchView: UIView {
    
    override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
        let originalHitView = super.hitTest(point, with: event)
        return originalHitView === self ? nil : originalHitView
    }
    
}
仅当按下“self”时,此代码才会返回
nil
。所有其他情况都将正常工作。这样子视图不受影响

您可以将其应用于任何视图。在您的情况下,我假设您需要将其放入
Main
情节提要中,并将其定义为
TripInProgressDialog
的主视图的类


请发布故事板的屏幕截图好吗?当对话框出现时,事件将直接指向它,而不是底层视图。。。你说它是透明的,但这不是拒绝视图的方式。为什么不把它藏起来,或者在不用的时候把它完全消除呢?或者按照马特的回答,让它成为一个常规视图