How To Switch To A New View On Simple Button Click?
The best way would be to use a NavigationLink
and wrapping the content inside a NavigationView
.
The NavigationView
is used to represent the view hierarchy.
For instance:
// Wrapper for LogIn
struct ContentView: View {
var body: some View {
NavigationView { LogIn() }
}
}
// LogIn
struct LogIn: View {
var body: some View {
VStack {
// Fields for log in
NavigationLink(destination: SignUp()) {
Text("Create New Account")
.foregroundColor(.white)
.font(.title)
.frame(maxWidth: .infinity, alignment: .center)
.background(Color(red: 0.22, green: 0.655, blue: 0.02))
.cornerRadius(8)
.padding(.horizontal, metrics.size.width*0.10)
}
}
}
}
You can find more info in the official docs:
- NavigationView
- NavigationLink
Also [Hacking With Swift] (https://www.hackingwithswift.com/quick-start/swiftui/displaying-a-detail-screen-with-navigationlink) is a great resource for SwiftUI
Button, how to open a new View in swiftUI embedded in navigation bar
You just need to add a sheet modifier to your view, which presents your view depending on the value of isAddPresented, just like this:
struct ContentView: View {
@State var isAddPresented = false
var body: some View {
NavigationView {
List(dm.storage){ data in
StileCella(dm2: data)
}
.navigationBarTitle("Lista Rubrica")
.navigationBarItems(trailing: Button("Button") {
self.isAddPresented = true
})
} .sheet(isPresented: $isAddPresented,
onDismiss: { self.isAddPresented = false }) {
DetailView()
}
}
}
The important bit is to remember to set isAddPresented back to false in on dismiss to prevent it form presenting again.
SwiftUI: How to Navigate from one view to another by clicking on a button
To use a NavigationLink
you have to wrap it in a NavigationView
struct ContentView: View {
var body: some View {
NavigationView { // <--- add this
NavigationLink(destination: DetailsView()) {
Text("ADD TO CART")
.font(.headline)
.bold()
.padding(.all, 10)
.padding(.leading, 10)
.padding(.trailing, 10)
.foregroundColor(.white)
.background(Color.orange.frame(width: 300, height: 50) .clipShape(RoundedRectangle(cornerRadius: 20)))
}
}
}
}
How to navigate to a View in SwiftUI without NavigationLink
First of all - congratulations: This is the first such complex code, that flawlessly runs on copy/paste into Xcode ... doesn't happen often :)
To your question:
You almost have it. The only thing is that your productFamilyIsActive
is a Bool – that can only hold info on ONE selected NavigationLink, you have 3. But it can if you change it to an optional selection:
class Navigation: ObservableObject {
@Published var productFamilyIsActive : String? = nil // here
}
For that you use a different init on NavigationLink here:
struct ProductFamilyRow: View {
@EnvironmentObject var navigation : Navigation
@State var productFamily : String
var body: some View {
NavigationLink(destination: PartNumberView(productFamily: productFamily),
tag: productFamily, // here
selection: $navigation.productFamilyIsActive) { // and here
Text("\(productFamily)")
}
.isDetailLink(false)
}
}
Lastly you don't set to false but to nil here:
struct HomeButtonView: View {
@EnvironmentObject var navigation : Navigation
var body: some View {
Button(action: {
self.navigation.productFamilyIsActive = nil // here
}, label: {
Image(systemName: "house")
})
.environmentObject(navigation)
}
}
Voila!
Go to a new view using SwiftUI
The key is to use a NavigationView and a NavigationLink:
import SwiftUI
struct ContentView : View {
var body: some View {
NavigationView {
VStack {
Text("Hello World")
NavigationLink(destination: DetailView()) {
Text("Do Something")
}
}
}
}
}
Related Topics
How to Create a Packed Data Structure in Swift
Healthkit Error: Missing Com.Apple.Developer.Healthkit Entitlement
Swift Uisearchcontroller Wired Up in Core Data Project, App Runs, But Search Not Updating
Swift: Function with Default Parameter Before Non-Default Parameter
Why Does a Public Class/Struct in Swift Require an Explicit Public Initializer
Coredata Crash Error Xcode 11 Beta, iOS 13 Beta
How to Write an 'If Case' Statement as an Expression
How to Check If a String Contains Letters in Swift
Swift: Uicollectionview Selecting Cell Indexpath Issues
How to Add "%" to Data in iOS-Chart
Swift: How to Fully Strip Internal/Inline Symbols
Swiftui MACos Xcode Style Toolbar
Change What Print(Object) Displays in Swift 2.0
iOS Screen Sharing (Using Replaykit) Using Webrtc in Swift
Swift - Initialize View Controller from Storyboard by Overriding Init
What Is a Good Alternative for Static Stored Properties of Generic Types in Swift