我有一个登录屏幕。用户填写凭据后,我想验证它然后启动一个新的根 View ,这样用户将无法导航回登录 View 。
我目前有
Button(action: {
// launch new root view here
}, label: {Text("Login")}).padding()
我在网上找到的大多数答案都使用了我不想使用的导航链接。其他一些答案建议使用
AppDelegate
来自 UIApplication.shared.delegate
这对我不起作用,因为我有 SceneDelegate
最佳答案
这是如何完全替换根 View 的可能替代方法......使用通知
class SceneDelegate: UIResponder, UIWindowSceneDelegate {
let loginRootViewNotification =
NSNotification.Name("loginRootViewNotification") // declare notification
private var observer: Any? // ... and observer
...
// in place of window creation ...
let window = UIWindow(windowScene: windowScene)
window.rootViewController = UIHostingController(rootView: contentView)
observer = NotificationCenter.default.addObserver(forName: loginRootViewNotification, object: nil, queue: nil, using: { _ in
let anotherRootView = AnotherRootView()
// create another view on notification and replace
window.rootViewController = UIHostingController(rootView: anotherRootView)
})
在你想要的地方发布需要的通知
Button(action: {
// launch new root view here
NotificationCenter.default.post(loginRootViewNotification)
}, label: {Text("Login")}).padding()
关于ios - 如何在没有 NavigationLink 的情况下使用 SwiftUI 推送新的 Root View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60134061/