[ad_1]
I’m new to SwiftUI and wish to navigate to a “residence” view in SwiftUI from another view. I’ve created a house button that’s added to the navigation bar on a number of views. The house button returns to the “residence” view however the navigation hyperlinks do not navigate accurately and show the unsuitable information.
I’ve learn by way of a number of solutions from others having the same downside however the solutions are not less than two years outdated and SwiftUI has modified fairly a bit since then. I’ve tried to implement most of the solutions however all the time bumped into different issues. Some performance has been deprecated and I am in search of a extra ahead wanting resolution.
Right here is a few code that reveals the issue. On this instance, I am utilizing the isActive parameter in NavigationLink to set off the house button however this appears to interrupt the NavigationLink. I’ve additionally tried utilizing the tag and choice parameters and get the identical outcomes. From studying different responses, I imagine utilizing the ForEach assertion in “ProductFamilyView” is the issue with referencing the unsuitable information. However, on this app, I want to make use of the ForEach assertion to show the product households.
If I attempt calling ProductFamilyView(), nothing occurs. On this instance, I need to navigate again to the “ProductFamilyView”. Is there one other strategy to navigate to this view with out utilizing NavigationLink?
import SwiftUI
import Mix
class Navigation: ObservableObject {
@Printed var productFamilyIsActive : Bool = false
}
struct ContentView: View {
@StateObject var navigation = Navigation()
var physique: some View {
NavigationView {
VStack {
LoginButtonView(buttonText: "Login")
}
}
.environmentObject(navigation)
.navigationViewStyle(StackNavigationViewStyle() )
}
}
struct LoginButtonView: View {
@State personal var navigated : Bool = false
var buttonText : String
var physique: some View {
Button(motion: {
self.navigated.toggle()
}, label: {
Textual content("(buttonText)")
})
.navigationBarBackButtonHidden(true)
NavigationLink(vacation spot: ProductFamilyView(), isActive: $navigated ) {
EmptyView()
}
}
}
struct ProductFamilyView: View { //That is my residence view
personal var productFamilies = ProductFamilyViewModel.loadData()
var physique: some View {
Listing {
ForEach(productFamilies) { (product) in
ProductFamilyRow(productFamily: product.productFamily)
}
}
.navigationTitle("Product Households")
.navigationBarTitleDisplayMode(.inline)
.navigationBarBackButtonHidden(true)
}
}
struct ProductFamilyRow: View {
@EnvironmentObject var navigation : Navigation
@State var productFamily : String
var physique: some View {
NavigationLink(vacation spot: PartNumberView(productFamily: productFamily), isActive: $navigation.productFamilyIsActive) {
Textual content("(productFamily)")
}
.isDetailLink(false)
}
}
struct PartNumberView: View {
@State var productFamily: String
var productDetails = ProductViewModel.loadData()
var physique: some View {
Listing {
ForEach(productDetails) { (productDetail) in
if productFamily == productDetail.productFamily {
NavigationLink(vacation spot: PartNumberRow(productDetail: productDetail)) {
Textual content("(productDetail.partNumber)")
}
}
}
}
.navigationTitle("(productFamily)")
.navigationBarItems(trailing: HomeButtonView() )
}
}
struct PartNumberRow: View {
@State var productDetail : ProductViewModel
var physique: some View {
Listing {
Textual content("Description: (productDetail.description)")
NavigationLink(vacation spot: ColorView(colorOptions: productDetail.colorOptions)) {
Textual content("Coloration Choices")
}
}
.navigationTitle("(productDetail.partNumber)")
.navigationBarItems(trailing: HomeButtonView() )
}
}
struct ColorView: View {
@State var colorOptions : [Item]
var physique: some View {
Listing {
ForEach(colorOptions) { (colour) in
Textual content("(colour.identify)")
}
}
.navigationBarItems(trailing: HomeButtonView() )
}
}
struct HomeButtonView: View {
@EnvironmentObject var navigation : Navigation
var physique: some View {
Button(motion: {
self.navigation.productFamilyIsActive.toggle()
}, label: {
Picture(systemName: "home")
})
.environmentObject(navigation)
}
}
class ProductFamilyViewModel: ObservableObject, Identifiable {
var id = UUID().uuidString
var productFamily : String = ""
init(productFamily: String) {
self.productFamily = productFamily
}
static func loadData() -> [ProductFamilyViewModel] {
let merchandise = ["Product Family 1", "Product Family 2", "Product Family 3"]
var productFamilies : [ProductFamilyViewModel] = []
for product in merchandise {
productFamilies.append(ProductFamilyViewModel(productFamily: product))
}
return productFamilies
}
}
struct Merchandise: Identifiable, Codable {
var id : String {
self.identify
}
var identify : String
}
struct Product: Identifiable {
var id = UUID().uuidString
var partNumber : String = "half quantity"
var productFamily : String = "product household"
var description : String = "description"
var colorOptions : [Item] = []
}
class ProductViewModel: ObservableObject, Identifiable {
var id = UUID().uuidString
var partNumber : String
var productFamily : String
var description : String
var colorOptions : [Item]
init(mannequin: Product) {
self.partNumber = mannequin.partNumber
self.productFamily = mannequin.productFamily
self.description = mannequin.description
self.colorOptions = mannequin.colorOptions
}
static func loadData() -> [ProductViewModel] {
let colours = [Item(name: "red"), Item(name: "white"), Item(name: "blue")]
let productDetails : [ProductViewModel] = [
ProductViewModel( model: Product(
partNumber: "100-1111-101",
productFamily: "Product Family 1",
description: "Part Number 100-1111-101",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "100-1111-102",
productFamily: "Product Family 1",
description: "Part Number 100-1111-102",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "100-1111-103",
productFamily: "Product Family 1",
description: "Part Number 100-1111-103",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "200-1111-101",
productFamily: "Product Family 2",
description: "Part Number 200-1111-101",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "200-1111-102",
productFamily: "Product Family 2",
description: "Part Number 200-1111-102",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "200-1111-103",
productFamily: "Product Family 2",
description: "Part Number 200-1111-103",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "300-1111-101",
productFamily: "Product Family 3",
description: "Part Number 300-1111-101",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "300-1111-102",
productFamily: "Product Family 3",
description: "Part Number 300-1111-102",
colorOptions: colors)
),
ProductViewModel( model: Product(
partNumber: "300-1111-103",
productFamily: "Product Family 3",
description: "Part Number 300-1111-103",
colorOptions: colors)
)
]
return productDetails
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environmentObject(Navigation())
}
}
[ad_2]