2017-04-04 10 views
3

StoryboardAppDelegate에서 여러보기 컨트롤러를 인스턴스화하는 방법은 무엇입니까?

3 개의보기 컨트롤러 (V1, V2 및 V3)를 보유하는 컨테이너보기가 있습니다. 왼쪽 또는 오른쪽으로 스 와이프하여 A, B 또는 C에서 전환 할 수 있습니다. A 또는 B 모두 자체 컬렉션보기를 포함합니다. A 또는 B 내의 콜렉션 뷰에서 임의의 셀을 탭하면, PlayerVC (위의 그림에서 Player라는 이름의 ^^)가 시작되고 AVPlayer를 사용하여 비디오가 재생되기 시작합니다.

문제는 유니버설 링크를 사용하기 때문에 사용자가 곧바로 playerView로 이동하여 비디오를 재생하지만 완료 버튼을 누르면 응용 프로그램이 충돌합니다. 뷰 컨트롤러의 나머지 부분은 초기화되지 않았기 때문에 제가 생각하는 문제는 무엇입니까? 컨테이너 뷰와 다른 뷰 컨트롤러를 어떻게 초기화합니까? 또는 이것이 문제가 아닌 경우 문제가 무엇인지 알려주십시오.

다음은 일부 샘플 코드가 포함 된 앱 대리인입니다. 도와 주실 수있는 경우 코드를 제공해주십시오!

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { 

    if let pagingViewController = window?.rootViewController as? PagingViewController { 
     pagingViewController.videoPlaybackManager = videoPlaybackManager 
    } 
    return true 
} 



    class AppDelegate: UIResponder, UIApplicationDelegate { 
    // Other App Delegate methods..... 

    func application(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool { 

     // 1) Make sure the passed `user activity` has expected characteristics. 
     guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let url = userActivity.webpageURL else { 
      return false 
     } 

     // HELP: I need to get to `PlayerVC` from here? 

     return true 

     // If we can't do the above we default to opening the page in safari 
    } 
} 

편집 - 당신이 UIViewController 당신이 할 수있는 적절한 아이 설정, UIPageViewController를 처리하는 경우 내가 PagingViewController 내부 (컨테이너보기)

private func setupViewControllers() { 
     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     page1 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.feedViewController.rawValue) as! FeedViewController 
     page1.view.translatesAutoresizingMaskIntoConstraints = false 
     page1.delegate = self 
     scrollView.addSubview(page1.view) 
     addChildViewController(page1) 
     page1.didMove(toParentViewController: self) 
     // Inject dependency. 
     page1.videoPlaybackManager = videoPlaybackManager 

     page2 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.favoritesViewController.rawValue) as! FavoritesViewController 
     page2.view.translatesAutoresizingMaskIntoConstraints = false 
     page2.delegate = self 
     scrollView.addSubview(page2.view) 
     addChildViewController(page2) 
     page2.didMove(toParentViewController: self) 

     page3 = storyboard.instantiateViewController(withIdentifier: StoryboardIdentifiers.settingsViewController.rawValue) as! SettingsViewController 
     page3.view.translatesAutoresizingMaskIntoConstraints = false 
     scrollView.addSubview(page3.view) 
     addChildViewController(page3) 
     page3.didMove(toParentViewController: self) 
...... 
+0

일반적으로 컨테이너 VC를 어떻게 초기화합니까? 그것은 didLaunchWithOptions'에 없습니까? – dmorrow

+0

안녕하세요, 저는 예제가 완성 된 방법을 보여주는 코드를 추가했습니다. 감사합니다. – user7097242

+0

사실 ContainerVC가 스토리 보드를 통해 초기화되고 있습니다. – user7097242

답변

0

을 3 개 벤처 캐피탈을 인스턴스화하고 방법의 추가 코드 :

,691 : 당신의 AppDelegateapplication(_ application: UIApplication, continue userActivity: NSUserActivity, restorationHandler: @escaping ([Any]?) -> Void) -> Bool에서
// In PagingViewController 
func loadChildViewControllerFromUniversalLink(myParameter: Bool) { 
    // The condition you need to satisfied in order to present 
    // the correct child view controller 
    if myParameter { // is satisfied 
     let universalLinkVc = MyChildViewController() // load your VC here 
     let direction : UIPageViewControllerNavigationDirection = .forward // or .reverse, as you wish 
     self.setViewControllers([universalLinkVc], direction: direction, animated: animated, completion: nil) 
    } 
} 

그리고

myPagingViewControllerInstance.loadChildViewControllerFromUniversalLink(true) 
+0

안녕하세요 펠리페. UIPageViewController를 사용하고 있지는 않지만 대신 V1, V2 및 V3에 대한 컨테이너보기 역할을하는 PagingViewController라는 VC를 사용하고 있습니다. 그런 다음 3 개의 Vc를 모두 인스턴스화합니다. 추가 한 추가 코드를 살펴보고 가능한 경우 코드를 수정하십시오. 도와 주셔서 감사합니다!! – user7097242