我试图将一个UIViewController添加到另一个UIViewController,然后在其上有一个UIGestureRecogniser。这是一个坏主意吗?我似乎根本没有接收到子ViewController的触摸事件。我可以启用它们吗,或者这只是愚蠢的做法?
码:
在主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
Run Code Online (Sandbox Code Playgroud)
并在SliderViewController上
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
print("touches began") // never gets called
}
Run Code Online (Sandbox Code Playgroud)
如果我提出
self.present(slider, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)
而不是添加为子视图,它可以正常工作。
您可能还需要将滑块控制器添加为子控制器。通过这种方式,UIKit会知道要添加为子视图的视图已绑定到某个视图控制器,因此它将确保子视图控制器将接收相同的UI事件,例如用户触摸,方向更改,与生命周期相关的回调,例如viewDidLoad,viewWillAppear等。
要将其添加slider为子视图控制器,您应该执行以下操作:
self.addChildViewController(slider)
self.view.addSubview(slider.view)
slider.didMove(toParentViewController: self)
Run Code Online (Sandbox Code Playgroud)
删除子视图控制器时,应按相反的顺序进行相反的操作:
slider.willMove(toParentViewController: nil)
slider.view.removeFromSuperView()
slider.removeFromParentViewController()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1509 次 |
| 最近记录: |