iOS) 위젯으로 앱의 특정 뷰로 이동(widgetURL)

less than 1 minute read

👉 위젯을 통해 앱의 특정 뷰로 이동

  • QR Code 위젯을 선택하면 아래와 같이 화면전환이 적용된 QR Code 인식 뷰로 이동하도록 하겠습니다.

스크린샷 2022-12-02 오전 11 30 28

👉 [widgetURL(:)](https://developer.apple.com/documentation/swiftui/view/widgeturl(:))

위젯을 클릭했을 때 containing app 에서 열릴 URL 을 설정합니다.

Overview

widgetURL modifier 는 view hierarchy 에서 하나만 지원합니다. 여러 뷰에 widgetURL 이 있는 경우 동작이 정의되지 않습니다.

struct QRCodeEnytryView : View {
    var entry: QRCodeProvider.Entry
    
    var body: some View {
        Image("widgetQr")
            .resizable()
            .scaledToFill()
            // ✅
            .widgetURL(URL(string: "openQRCode"))
    }
}

👉 scene(_:openURLContexts:)

Asks the delegate to open one or more URLs.

func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
        let qrcodeURL: String = "openQRCode"
        
        guard let url = URLContexts.first?.url,
              let urlComponents = URLComponents(url: url, resolvingAgainstBaseURL: true) else { return }
        
        if qrcodeURL == urlComponents.path {
            guard let nextViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "NextViewController") as? NextViewController else { return }
            window?.rootViewController?.present(nextViewController, animated: true, completion: nil)
        }
    }

widgetURL 로 설정한 URL 이 들어오게 되면 containing app 의 특정 뷰로 화면전환하도록 하였습니다.

Categories:

Updated: