【问题标题】:SwiftUI How to push to next screen when tapping on ButtonSwiftUI如何在点击按钮时推送到下一个屏幕
【发布时间】:2019-07-01 04:24:35
【问题描述】:

我可以使用 NavigationButton(推送)或使用 PresentationButton(呈现)导航到下一个屏幕,但我想在点击 Button() 时推送

Button(action: {
// move to next screen
}) {
   Text("See More")
}

有什么办法吗?

【问题讨论】:

  • swiftUI 你只能使用NavigateButton (push) or present with PresentationButton的两个选项
  • 那么,有没有办法在使用 NavigateButton 时隐藏箭头,我只想显示“查看更多”文本,点击它应该推送到下一个屏幕?

标签: ios swiftui xcode11 ios13


【解决方案1】:

你可以使用NavigationLink

注意:请在真机上试用。在模拟器中有时无法正常工作。

struct MasterView: View {
    @State var selection: Int? = nil

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: DetailsView(), tag: 1, selection: $selection) {
                    Button("Press me") {
                        self.selection = 1
                    }
                }
            }
        }
    }
}

struct DetailsView: View {
    @Environment(\.presentationMode) var presentation

    var body: some View {
        Group {
            Button("Go Back") {
                self.presentation.wrappedValue.dismiss()
            }
        }
    }
}

【讨论】:

    【解决方案2】:

    如您所见,要显示新视图,添加 NavigationLinkisActive: $pushView,使用 <.hidden()> 隐藏导航“箭头”。

    接下来添加Text("See More")tapGesture 以使文本响应点击。当您单击“查看更多”文本时,变量 pushView 将发生变化 (false => true)。

    import SwiftUI
    
    struct ContentView: View {
    
        @State var pushView = false
    
        var body: some View {
            NavigationView {
    
                List {
                    HStack{
                        Text("test")
                        Spacer()
                        NavigationLink(destination: NewView(), isActive: $pushView) {
                            Text("")
                        }.hidden()
                            .navigationBarTitle(self.pushView ? "New view" : "default view")
                        Text("See More")
                            .padding(.trailing)
                            .foregroundColor(Color.blue)
                            .onTapGesture {
                                self.pushView.toggle()
                        }
                    }
                }
            }
        }
    }
    
    struct NewView: View {
    
        var body: some View {
            Text("New View")
        }
    }
    

    ContentView picture

    NewView picture

    【讨论】:

    • 你能解释一下你做了什么而不是仅仅发布你的代码吗?
    • 如您所见,要显示新视图,请使用“isActive: $pushView”添加“NavigationLink”,但使用 <.hidden> 不会显示导航“箭头”。然后使用 tapGesture 添加文本(“查看更多”)以单击“喜欢”按钮。当您单击“查看更多”文本时,变量“pushView”将发生变化(false => true)。
    【解决方案3】:

    你可以使用NavigationLink来实现这个:

    struct DetailsView: View {
        var body: some View {
            VStack {
                Text("Hello world")
            }
        }
    }
    
    struct ContentView: View {
        @State var selection: Int? = nil
        var body: some View {
            NavigationView {
                VStack {
                    NavigationLink(destination: DetailsView(), tag: 1, selection: $selection) {
                        Button("Press me") {
                            self.selection = 1
                        }
                    }
                }
            }
        }
    }
    

    【讨论】:

      【解决方案4】:

      要点击按钮并导航到下一个屏幕,您可以使用 NavigationLink,如下所示

      NavigationView{
             NavigationLink(destination: SecondView()) {
                   Text("Login")
                    .padding(.all, 5)
                    .frame(minWidth: 0, maxWidth: .infinity,maxHeight: 45, alignment: .center)
                    .foregroundColor(Color.white)
             }
       }
      

      【讨论】:

        猜你喜欢
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-11
        • 2020-07-28
        • 2015-12-07
        • 1970-01-01
        • 2021-07-17
        相关资源
        最近更新 更多