前提・実現したいこと
現在Tabviewでブラウザを表示させる機能をつけています。
Swift UI WkWebViewにおいて、ページの表示と進むことまで実装できたのですが、
ブラウザバックかもしくは左上に戻るボタンが欲しく、いくらやってもエラーになってしまいます。
現在のソースコード単体ではブラウザを進むことしかできません。
Storyboardは使用しておりません。
発生している問題・エラーメッセージ
Cannot convert value of type 'Binding<Int>' to expected argument type 'Binding<_>?'
該当のソースコード
import SwiftUI import UIKit import WebKit struct ContentView: View { @State private var selection = 0 var body: some View { TabView(selection: $selection){ WebView1(loadUrl: "https://www.google.com") .tabItem { Image("home") } .tag(0) WebView2(loadUrl: "https://www.yahoo.co.jp") .font(.title) .tabItem { VStack { Image("list") } } .tag(1) } .edgesIgnoringSafeArea(.top) } } struct ContentView_Previews: PreviewProvider { static var previews: some View { ContentView() } } class observable: ObservableObject { @Published var observation:NSKeyValueObservation? } struct WebView1: UIViewRepresentable { var loadUrl:String @ObservedObject var observe = observable() func makeUIView(context: Context) -> WKWebView { return WKWebView(frame: .zero) } func updateUIView(_ uiView: WKWebView, context: Context) { observe.observation = uiView.observe(\WKWebView.url, options: .new) { view, change in if let url = uiView.url { print("Page loaded: (url)") } } uiView.load(URLRequest(url: URL(string: loadUrl)!)) } } struct WebView2: UIViewRepresentable { var loadUrl:String @ObservedObject var observe = observable() func makeUIView(context: Context) -> WKWebView { return WKWebView() } func updateUIView(_ uiView: WKWebView, context: Context) { observe.observation = uiView.observe(\WKWebView.url, options: .new) { view, change in if let url = uiView.url { print("Page loaded: (url)") } } uiView.load(URLRequest(url: URL(string: loadUrl)!)) } }
試したこと
developer.apple.com
などを参考にして組み込もうと奮闘しているのですが、いくらやってもできません。
func goBack() -> WKNavigation? var allowsBackForwardNavigationGestures: Bool { get set }
などを使用する感じみたいなのですが…どこに入れたらいいのか分からず。
// スワイプで戻る、進むを有効にする webView.allowsBackForwardNavigationGestures = true
のようなコードを組み込もうとしてもうまくいきません。
var body: some View { TabView(selection: $selection){ WebView1()←ここを変更して別シートのWebView1のシートにリンク .tabItem { Image("home") } .tag(0)
にしてWebView1のシートを別で作ってリンクさせようとしたら、
Cannot convert value of type 'Binding<Int>' to expected argument type 'Binding<_>?'
というエラーがTabView(selection: $selection)の行で出てしまいます。
これもいくら調べても解決できませんでした。
このアプリを完成させるためにどうしてもブラウザバック機能をつけたいです。
組み込めるならばSafariにとぶようなコードでも構いません。
どうか力を貸してください。よろしくお願いします。
補足情報(FW/ツールのバージョンなど)
iOS 13.3
Xcode 11.3.1
SwiftUI
あなたの回答
tips
プレビュー