2016-10-03 13 views
1

私は別のUIViewControllerにUIViewControllerを追加しようとしていて、その上にUIGestureRecogniserを持っています。これは悪い考えですか?サブビューコントローラーにタッチイベントを受け取っていないようです。私はそれらを有効にすることができますか?これはちょうど愚かな練習ですか?メインのViewControllerサブビューとしてのUIViewcontrollerはタッチイベントを受け取りません

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 

} 

上で

Iの代わりにサブビューとして追加の

self.present(slider, animated: true, completion: nil) 

と一緒に存在する場合、それは:

CODEを 正常に動作します。

+0

'UIViewContoller'はあなたがiOS用に開発した方法ではありません。代わりに 'UIView'を使用してください。 – JuicyFruit

答えて

4

slider.didMoveToParentViewController(self) 

を追加してみます。このように、UIKitは、サブビューとして追加されるビューがいくつかのビューコントローラに結びついていることを知っているので、子ビューコントローラがユーザーのタッチ、方向変更、ライフサイクル関連のコールバック(viewDidLoad) 、viewWillAppearなども同様です。子ビューコントローラとしてsliderを追加するには

、あなたが実行する必要があります。

self.addChildViewController(slider) 
self.view.addSubview(slider.view) 
slider.didMove(toParentViewController: self) 

子ビューコントローラを取り外すときは、逆の順序で逆の操作を行う必要があります。

`UIViewController`内部を追加
slider.willMove(toParentViewController: nil) 
slider.view.removeFromSuperView() 
slider.removeFromParentViewController() 
+0

これは、self.addChildViewController(スライダ)が違いを生む行です:slider.didMoveToParentViewController(self)は何の影響もありません。それは私にしてくれます。ありがとう! –

+0

あなたはまだ 'didMoveToParentViewController'を呼び出す必要があります。子ビューコントローラは、いくつかのコールバックを介して子ビューコントローラとして追加されることについて通知されるので、 – ozgur

0

はおそらく、あまりにも子供のコントローラとして、スライダコントローラを追加する必要が

self.view.addSubview(slider.view) 
+0

返信ありがとうございます - しかし違いはありません:( –

関連する問題