質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

解決済

1回答

2382閲覧

SwiftUIでWebViewからネイティブの画面へ遷移したい

tenshonkawaru

総合スコア45

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2022/01/06 02:36

WebViewの遷移先URLに特定の文字列が含まれている場合、ネイティブで作成された画面を表示させたいです。
現在、以下のようなコードを考えているのですが、コード内で遷移先を指定する場合、どのように記載したらよろしいでしょうか。
調べたところObjective-Cを使ったやり方もありましたが、こちらはうまくいきませんでした。
また、もしこのやり方に難がある場合、他に方法をご存じでしたらご教授いただけますと幸いです。

開発はXCodeで行なっています。

SwiftUI

1func updateUIView(_ webView: WKWebView, context: Context) { 2 // 色々書いてありますが関係ないので省略 3 WebViewURLObservable().instance = webView.observe(.url, options: .new) { view, change in 4 if let url = view.url { 5 if url.absoluteString.contains("ここに記載した文字列が入っていたら") { 6 // ネイティブで作成した画面(以下のTestView)へ遷移する 7 // ここがわからない箇所です 8 } 9 } 10 } 11 webView.load(URLRequest(url: url)) 12}

SwiftUI

1struct TestView: View { 2 var body: some View { 3 // 画面を表示する 4 } 5} 6 7struct TestView_Previews: PreviewProvider { 8 static var previews: some View { 9 TestView() 10 } 11}

よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

自己解決しました。
以下のサイトがかなり参考になりました。
https://qiita.com/ikaasamay/items/58d1a401e98673a96fd2
今回の質問としてはWebView→ネイティブなのでここの部分しか記載していませんが、こちらのサイトではWebViewに戻る処理も記載があります。

SwiftUI

1struct WebView: UIViewRepresentable { 2 let viewModel:ViewModel 3 func updateUIView(_ webView: WKWebView, context: Context) { 4 // 色々書いてありますが関係ないので省略 5 WebViewURLObservable().instance = webView.observe(.url, options: .new) { view, change in 6 if let url = view.url { 7 if url.absoluteString.contains("ここに記載した文字列が入っていたら") { 8 // ネイティブへ遷移するフラグを立てる 9 viewModel.isShowing = true 10 } 11 } 12 } 13 webView.load(URLRequest(url: url)) 14 } 15}

SwiftUI

1struct TestView: View { 2 @ObservedObject var viewModel = ViewModel() 3 var body: some View { 4 WebView(viewModel: viewModel) 5 .fullScreenCover(isPresented: $viewModel.isShowing) { 6 // フラグが立っているときはこちらに遷移する 7 SecondView(viewModel: viewModel) 8 } 9 } 10}

SwiftUI

1class ViewModel: ObservableObject { 2 3 @Published var url: String = "URL" 4 @Published var isShowing: Bool = false 5 6}

SwiftUI

1struct SecondView: View { 2 @ObservedObject var viewModel : ViewModel 3 var body: some View { 4 View() 5 6 } 7}

投稿2022/01/07 02:08

tenshonkawaru

総合スコア45

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問