我试图将UIViewController添加到另一个UIViewController,然后在其上有一个UIGestureRecogniser。这是一个坏主意吗?我似乎根本没有接触到子视图控制器的触摸事件。我能启用它们还是这只是一种愚蠢的做法?
CODE:
在主ViewController上
let slider = SliderViewController()
slider.view.frame = CGRect(x: 0, y: 100, width: self.view.frame.size.width, height: self.view.frame.size.height/4)
self.view.addSubview(slider.view)
slider.view.isUserInteractionEnabled = true // doesnt seem to make any difference
和SliderViewController
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touches began") // never gets called
}
如果我用
出示self.present(slider, animated: true, completion: nil)
而不是作为子视图添加,它可以正常工作。
答案 0 :(得分:4)
您可能还需要将滑块控制器添加为子控制器。通过这种方式,UIKit将知道作为子视图添加的视图与某个视图控制器绑定,因此它将确保子视图控制器将接收相同的UI事件,例如用户触摸,方向更改,生命周期相关的回调例如viewDidLoad
,viewWillAppear
等。
要将slider
添加为子视图控制器,您应该执行以下操作:
self.addChildViewController(slider)
self.view.addSubview(slider.view)
slider.didMove(toParentViewController: self)
删除子视图控制器时,您应该以相反的顺序执行相反的操作:
slider.willMove(toParentViewController: nil)
slider.view.removeFromSuperView()
slider.removeFromParentViewController()
答案 1 :(得分:0)
尝试添加
slider.didMoveToParentViewController(self)
后
self.view.addSubview(slider.view)