如何通过单击按钮转到另一个视图

Posted

技术标签:

【中文标题】如何通过单击按钮转到另一个视图【英文标题】:How to go to another view with button click 【发布时间】:2019-08-01 15:01:20 【问题描述】:

我的代码中有一个按钮,我有一个名为 LogindView.swift 的文件

单击按钮时,我无法获取打开另一个视图文件的代码。

谁能给我一个例子来说明如何做到这一点。

在我的按钮操作中,我尝试编写 LogindView(),但我只是给了我一个警告。 "'LogindView' 初始化程序的结果未使用"

    Button(action: 
            // Do action
            LogindView()
        , label: 
            //** Label text
            Text("Logind")
                .font(.headline)
                .padding(.all)
                .foregroundColor(Color.white)
        )
        .background(Color.blue)

【问题讨论】:

好笑!我确实输入了一些代码。但它就在这里。 Button(action: // 执行操作 LogindView() , label: //** 标签文本 Text("Logind") .font(.headline) .padding(.all) .foregroundColor(Color.white) ) .background(Color.blue) LogindView() 给了我这个警告。 "'LogindView' 初始化程序的结果未使用" @JensThomsen 我建议将该代码添加到您的问题中-此处的评论不可读 在我的问题中添加了代码。 【参考方案1】:

您基本上有 3 个选项可以根据您的需要在视图之间进行转换。


首先,您可以使用NavigationView。这将提供一个后退按钮,并允许用户返回。请注意,当您没有按照https://***.com/a/57122621/3179416 将NavigationLink 放入List 内时,当前存在一些错误

import SwiftUI

struct MasterView: View 
        var body: some View 
        NavigationView 
            List 
                NavigationLink(destination: LoginView()) 
                    Text("Login")
                
            
            .navigationBarTitle(Text("Master"))
        
    


struct LoginView: View 
    var body: some View 
        Text("Login View")
    


第二,您可以使用.sheet 呈现模态。这将呈现一个显示在当前视图顶部的模式,但用户可以通过将其向下拖动来将其关闭。

import SwiftUI

struct MasterView: View 
    @State var isModal: Bool = false

    var body: some View 
        Button("Login") 
            self.isModal = true
        .sheet(isPresented: $isModal, content: 
            LoginView()
        )
    


struct LoginView: View 
    var body: some View 
        Text("Login View")
    


第三,您可以像这样使用if 语句将当前视图更改为您的登录视图

import SwiftUI

struct MasterView: View 
    @State var showLoginView: Bool = false

    var body: some View 
        VStack 
            if showLoginView 
                LoginView()
             else 
                Button("Login") 
                    self.showLoginView = true
                
            
        
    


struct LoginView: View 
    var body: some View 
        Text("Login View")
    

如果您想对此进行动画处理,以便过渡不会突然出现,您也可以这样做:

import SwiftUI

struct MasterView: View 
    @State var showLoginView: Bool = false

    var body: some View 
        VStack 
            if showLoginView 
                LoginView()
                    .animation(.spring())
                    .transition(.slide)
             else 
                Button("Login") 
                    withAnimation 
                        self.showLoginView = true
                    
                .animation(.none)
            
        
    


struct LoginView: View 
    var body: some View 
        Text("Login View")
    

【讨论】:

@JensThomsen 尝试上面的详细示例 还有 .fullScreenCover 选项,使用方式与您解释的模态表相同。【参考方案2】:

您可以使用导航链接代替按钮

var body: some View 
    VStack 
        Text("Title")
            .font(.headline)
        Image("myimage").clipShape(Circle())
        Text("mytext").font(.title)
        
        NavigationLink(destination: AnotherView()) 
           Image(systemName: "person.circle").imageScale(.large)
        
  
    

【讨论】:

正确答案。 按钮在哪里?

以上是关于如何通过单击按钮转到另一个视图的主要内容,如果未能解决你的问题,请参考以下文章

如何在不发送错误的情况下使按钮转到另一个视图控制器?

如何通过单击按钮在 Swift UI 中从一个视图导航到另一个视图

转到另一个视图控制器

单击按钮将项目添加到另一个视图控制器表视图

单击按钮时的列表视图

Spinner 和 Button 无法转到另一个视图