如何将我的登录屏幕链接到我的主屏幕 SwiftUI

Posted

技术标签:

【中文标题】如何将我的登录屏幕链接到我的主屏幕 SwiftUI【英文标题】:How to link my Login screen to my Home screen SwiftUI 【发布时间】:2021-09-09 06:57:58 【问题描述】:

我无法将登录屏幕链接到主屏幕。两者都是单独创建的,我使用 Button 功能创建了登录按钮,它会使用我登录的电子邮件进入另一个屏幕,但这不是我想要的,因为我希望我的主屏幕打开。

             Button(action: model.login) 
                     Text("LOGIN")
                    .fontWeight(.bold)
                    .foregroundColor(Color("Color1"))
                    .padding(.vertical)
                    .frame(width: UIScreen.main.bounds.width - 30)
                    .background(Color.white)
                    .clipShape(Capsule())
            
            .padding(.top, 22)

我的 MainView 代码开始

     struct MainView: View 
     @State private var isShowing = false
  
     var body: some View 
  
     NavigationView 
          
     ZStack 

【问题讨论】:

您好,欢迎来到 SO。你的问题很模糊。您能否提供minimal reproducible example,以便我们将其复制粘贴到您的 Xcode 中以更好地帮助您? 你可能想看看这个 SO 答案:***.com/questions/68757560/… 【参考方案1】:

在您的 App 结构中添加一个 State var isLoggedin 将其传递给 loginView 并从那里切换它。

这就是我的实现方式。

struct TestApp: App 
    
    @State var isLoggedin: Bool = false
    
    var body: some Scene 
        
        WindowGroup 
            if isLoggedin 
                ContentView()
             else 
                LoginView(isLoggedin: $isLoggedin)
            
        
    

struct LoginView: View 
    
    @Binding var isLoggedin: Bool
    
    var body: some View 
        
        Button(action: 
            isLoggedin = true
        , label: 
            Text("Login")
        )
    

这样您就可以选择要显示的视图。 ContentViewLoginView

【讨论】:

这里不需要Binding也没有用例,你可以使用闭包来完成这项工作!或者您可以在不使用视图闭包的情况下将模型注入内容视图! Ps:您的答案在实际用例中不可用! 我会创建一个模型,我将同时注入LoginViewContentView,其中包括isLoggedIn。我将采用与上述代码相同的方法。这有什么问题...你能详细说明吗? 加载过程需要时间,不知道什么时候完成!然后我们首先需要一个完成处理程序,因为我们得到了完成处理程序,这意味着我们不需要绑定!因为我们肯定会收到在 ContentView 上工作的 newValue! 模型应该完成所有工作,不需要完成处理程序。一旦保存了用户的所有信息(用户名、电子邮件、图标、api 令牌......)isLoggedIn 应该切换。当这些被删除时应该切换回来......我仍然不明白问题是什么。 :) 你错过了我提到的两种不同的方式!阅读我最后的cmets!一种方法是注入模态或制作 StateObject,第二种方法是在没有任何模型的情况下处理视图!在每种方式中,我们肯定都需要完成处理程序,并且不需要以每种方式绑定!另外 100% 你的答案是不实用的。

以上是关于如何将我的登录屏幕链接到我的主屏幕 SwiftUI的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法使用几何阅读器将我的 SwiftUI 图像的宽度定义为相对于屏幕尺寸?

当人们将我的移动网站保存到他们的主屏幕时,我该如何做到这一点,它会删除像 Kahoot.it 这样的 Safari?

如何在 SwiftUI 中从通知深层链接到屏幕?

使用导航控制器作为开始屏幕 ios

SwiftUI - 如何防止工作表中的键盘向上推我的主 UI

点击注销时 SwiftUI 将应用程序重置为登录屏幕