【发布时间】:2021-09-30 06:42:19
【问题描述】:
我正在开发 SwiftUI 应用程序,我正在导航到 SFSafariviewcontroller(浏览器),一旦登录完成,我就会得到 openurl。
我想在获得 openurl 后自动关闭 SFSafariviewcontroller。
感谢您的帮助...以下是我的工作
//how I am calling Safari
.fullScreenCover(isPresented: $isButtonActive, content: {
if let url = loginAction() {
SafariView(url: url)
}
}
//how i am getting openurl
@main
struct MyApplication: App {
var body: some Scene {
WindowGroup {
ContentView()
.onOpenURL { url in
// handle the URL that must be opened
}
}
}
}
我的 Safari 代码
import SafariServices
struct Myview: View {
@EnvironmentObject var appConfiguration : AppConfiguration
@State private var isButtonActive = true
@State private var isLoginActive = true
var body: some View {
NavigationView {
Button( buttonTitle: "button" buttonCallback: {
self.isLoginActive = true
}, isActive: $isButtonActive)
}
}
.afklPageView()
.navigationBarTitle("title", displayMode: .inline)
.fullScreenCover(isPresented: $isButtonActive, content: {
if let url = loginAction() {
SafariView(url: url)
}
})
}
}
struct SafariView: UIViewControllerRepresentable {
let url: URL
func makeUIViewController(context: UIViewControllerRepresentableContext<Self>) -> SFSafariViewController {
return SFSafariViewController(url: url)
}
func updateUIViewController(_ uiViewController: SFSafariViewController, context: UIViewControllerRepresentableContext<SafariView>) {
}
}
【问题讨论】:
-
我认为你不可能知道你应该关闭
SFSafariViewController,除非我们知道你一开始是如何打开它的。 -
我更新了我如何调用 URL 来打开 SFSafariciewcontroller 的问题...这有帮助吗?
-
一点。您需要将
isButtonActive设置为false。这可能意味着拥有某种状态,从应用程序的根级别一直共享到显示fullScreenCover的任何视图。你知道如何使用environment或environmentObject吗?或者如何通过视图传递状态? -
感谢您的指点。我需要检查如何使用它们,因为我现在不确定。如果你能有一些例子会很有帮助
-
@jnpdx 我理解概念,但我怀疑我没有看到任何关闭 safari 的方法,而不是手动单击完成按钮...但我想在 openurl 自动关闭 safari...你能帮忙?
标签: ios swiftui sfsafariviewcontroller