如何在没有 NavigationLink 的情况下使用 SwiftUI 推送新的根视图? [英] How to push a new root view using SwiftUI without NavigationLink?

查看:16
本文介绍了如何在没有 NavigationLink 的情况下使用 SwiftUI 推送新的根视图?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个登录屏幕.用户填写凭据后,我想验证它然后启动一个新的根视图,这样用户将无法导航回登录视图.我目前有

I have a login screen. After user fill up credential, I want to verify it then start a new root view so user won't be able to navigate back to the login view. I currently have

Button(action: { 
// launch new root view here 
}, label: {Text("Login")}).padding()

我在网上找到的大部分答案都使用了我不想使用的导航链接.其他一些答案建议使用 AppDelegate by UIApplication.shared.delegate 这对我不起作用,因为我有 SceneDelegate

Majority of answers I found online are using navigation link which I don't want to. Some other answers suggest to utilize AppDelegate by UIApplication.shared.delegate which isn't working for me because I have SceneDelegate

推荐答案

这里是如何完全替换根视图的可能替代方法...使用通知

Here is possible alternate approach of how to replace root view completely... using notifications

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)
        })

在你想要的地方发布需要的通知

in your desired place post needed notification

Button(action: { 
// launch new root view here 
   NotificationCenter.default.post(loginRootViewNotification)
}, label: {Text("Login")}).padding()

这篇关于如何在没有 NavigationLink 的情况下使用 SwiftUI 推送新的根视图?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆