我有一个视图控制器,可以在另一个视图控制器的上方覆盖。我只需要顶部的视图控制器,这样我就可以覆盖临时弹出的通知,而覆盖的VC允许我在UITableViewController上呈现此内容,因为您无法直接添加子视图到tableview控制器中。
如果另一个视图控制器覆盖底部视图控制器,是否可能与之交互。 如果这是一个视图或窗口,您可以通过将用户交互设置为false或使用hitTest来实现此功能,但这些方法都不适用于视图控制器。
我有一个视图控制器,可以在另一个视图控制器的上方覆盖。我只需要顶部的视图控制器,这样我就可以覆盖临时弹出的通知,而覆盖的VC允许我在UITableViewController上呈现此内容,因为您无法直接添加子视图到tableview控制器中。
如果另一个视图控制器覆盖底部视图控制器,是否可能与之交互。 如果这是一个视图或窗口,您可以通过将用户交互设置为false或使用hitTest来实现此功能,但这些方法都不适用于视图控制器。
像这样创建子类
class TouchDelegatingView: UIView {
weak var touchDelegate: UIView? = nil
override func hitTest(_ point: CGPoint, with event: UIEvent?) -> UIView? {
guard let view = super.hitTest(point, with: event) else {
return nil
}
guard view === self, let point = touchDelegate?.convert(point, from: self) else {
return view
}
return touchDelegate?.hitTest(point, with: event)
}
}
然后在您的ViewController中设置视图类(您可以直接在xib中完成,也可以在loadView()方法中完成)
并添加
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let delegatingView = view as? TouchDelegatingView {
delegatingView.touchDelegate = presentingViewController?.view
}
}
}
你也可以使用这种机制将触摸委托给任何其他视图,无论它是什么