2016-10-03 4 views
1

다른 UIViewController에 UIViewController를 추가하고 UIGestureRecogniser를 추가하려고합니다. 이것은 나쁜 생각입니까? 하위보기 컨트롤러에 터치 이벤트를 전혀받지 않는 것 같습니다. 나는 그들을 가능하게 할 수 있을까? 아니면 그냥 어리석은 관행인가?UIViewcontroller 터치 이벤트가 발생하지 않는 하위 뷰

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 

} 

가 I 대신 하위 뷰로서 추가하는

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

함께 존재하는 경우, 그것을 잘 작동합니다.

+0

: 아이 뷰 컨트롤러를 제거 할 때 당신은 역순으로 반대를해야

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

'UIViewContoller'는 iOS 용으로 개발하려는 방식이 아닙니다. 대신에'UIView'를 사용하십시오. – JuicyFruit

답변

4

slider.didMoveToParentViewController(self) 

추가하십시오. 이렇게하면 UIKit은 하위보기로 추가되는보기가 일부보기 컨트롤러에 연결되므로 하위보기 컨트롤러가 사용자 접촉, 방향 변경, 라이프 사이클 관련 콜백 (예 : viewDidLoad)과 같은 UI 이벤트를 수신하도록 보장합니다. , viewWillAppear 등. 아이 뷰 컨트롤러로 slider를 추가하려면

, 당신은해야한다 : 내부`UIViewController`를 추가

slider.willMove(toParentViewController: nil) 
slider.view.removeFromSuperView() 
slider.removeFromParentViewController() 
+0

this - self.addChildViewController (slider)는 차이를 만드는 줄입니다 slider.didMoveToParentViewController (self)는 아무런 영향을 미치지 않습니다. 감사합니다! –

+0

당신은 여전히'didMoveToParentViewController'를 호출해야합니다. 자식 뷰 컨트롤러가 어떤 콜백을 통해 자식 뷰 컨트롤러로 추가된다는 사실을 알게 될 것이기 때문에 구현할 필요가 없을 것입니다. – ozgur

0

당신은 아마 너무 아이 컨트롤러로 슬라이더 컨트롤러를 추가 할 필요가

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

답장을 보내 주셔서 감사합니다 - 비록 아무런 차이가 없습니다 :( –

관련 문제