2017-04-04 3 views
0

나는 내 응용 프로그램에서 다음과 같은 설정을 가지고 : Storyboard setupAppDelegate에서 UIViewController를 인스턴스화하는 방법은 무엇입니까?

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

문제는 : 사용자가 universal link에 도청 그래서 때

  • 이 응용 프로그램은 Universal Links를 공유 할 수 있습니다, 그것은 응용 프로그램에 직접 소요되는 PlayerVC를 시작하고 비디오 재생을 시작합니다. 문제는 사용자가 universal link을 탭하면 PlayerVC으로 직접 이동 한 경우 다른보기 컨트롤러를 초기화하는 방법입니다. 또는 app delegate에서 PlayerVC으로 이동하는 방법은 무엇입니까? 사용자가 PlayerVC에 직접 촬영 한 경우

    • , 그들은이 PlayerVC 응용 프로그램 충돌을 기각하는 경우 :

    는 여기에 몇 가지 시나리오입니다.

  • 앱이 이미 시작되었지만 백그라운드 모드 인 경우 사용자가 view controller B 인 경우 사용자가 universal link을 탭하면 view controller B에서 PlayerVC으로 어떻게 이동합니까?

    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 
        } 
    } 
    

    참고 : 우리의 응용 프로그램은 아이폰 OS (10) 실행

이는 universal link 사용자에 의해 도청 될 때합니다 (HELP 코멘트를주의하십시오) 호출되는 것을 app delegate에서 위임 방법이다. 우리는 유니버설 링크를 위해 애플의 새로운 API를 사용하고 있습니다 : https://developer.apple.com/library/content/documentation/General/Conceptual/AppSearch/UniversalLinks.html

어떤 생각? 그것은 응용 프로그램에 직접 소요

이 응용 프로그램은 사용자가 보편적 링크를 탭하면 너무 유니버설 링크를 공유 할 수있는 PlayerVC을 시작하고 재생을 시작합니다 :

답변

0

문제는 비디오. 문제는 범용 링크를 탭하면 사용자가 직접 PlayerVC로 이동 한 경우 다른 뷰 컨트롤러를 초기화하는 방법입니다 ( ). 또는 앱 위임자로부터 PlayerVC를 얻는 방법? 이 문제에 대한

, 당신은 다음, 사용자가 PlayerVC에 직접 촬영되고있는 경우, 당신은 PlayerVC

을 표시 할 수 있습니다, 먼저 컨테이너와 그 아이 뷰 컨트롤러의 인스턴스를 필요 더라면 그들은 PlayerVC를 종료하면 응용 프로그램이 다운됩니다.

내가 말한 구현에서는 충돌이 발생하지 않아야합니다.항상 거 컨테이너 컨트롤러 앱이 이미 실행되어있는 경우

를 인스턴스화하지만 백그라운드 모드에서의 사용자가 보편적 링크를 탭하면, 다음, 어떻게 수행 사용자가 뷰 컨트롤러 B이었다 가정 해 봅시다 할 수있다 보기 컨트롤러 B에서 PlayerVC로 이동합니까?

컨테이너 컨트롤러의 전역 변수를 AppDelegate에 저장할 수 있습니다. 이것으로 컨트롤러 B에 액세스 할 수 있습니다. 그러면

container.present(playerVC, animated: true, completion: nil) 
+0

안녕하십니까. 의견을 보내 주셔서 감사합니다. 내 문제를 기반으로 컨테이너와 하위 뷰 컨트롤러를 인스턴스화하는 방법을 정확히 지정하려면 어떻게해야합니까? 코드 샘플을 제공 할 수 있습니까? 감사 – JEL