UIViewcontroller作为子视图没有获得触摸事件

时间:2016-10-03 17:30:18

标签: ios swift

我试图将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)

而不是作为子视图添加,它可以正常工作。

2 个答案:

答案 0 :(得分:4)

您可能还需要将滑块控制器添加为子控制器。通过这种方式,UIKit将知道作为子视图添加的视图与某个视图控制器绑定,因此它将确保子视图控制器将接收相同的UI事件,例如用户触摸,方向更改,生命周期相关的回调例如viewDidLoadviewWillAppear等。

要将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)
相关问题