Несколько назначений внутри списка SwiftUI

#listview #navigationview #swiftui-navigationlink

#listview #NavigationView #SwiftUI-navigationlink

Вопрос:

Я создал a MenuList , a MenuListElementView и a MenuListElement . В моем MenuList

 struct MenuList {
static let listData: [MenuListElement] = [
    MenuListElement(elementID: 0, icon: Constants.IconNames.smileyFace, title: Constants.IconTitles.title1, color: Constants.Colors.gray, numbers: 2),... 
 }
 

и так далее, я создал 10 отдельных элементов списка.

В моем MenuListElement

 struct MenuListElement: Identifiable {
var id: Int {
    return elementID
}
var elementID: Int
var icon: String
var title: String
var color: Color
var numbers: Int
}
 

В моем MenuListElementView случае я просто разработал, каким должен быть каждый из элементов списка.
введите описание изображения здесь

Наконец, я разработал этот MenuView

введите описание изображения здесь

Теперь, что я хочу сделать, это перейти к другому назначению в каждом MenuListElement при нажатии в этом коде.

  NavigationView{
            List(MenuList.listData) { item in
                    MenuListElementView(item: item)
            }
        }
 

Допустим, я хочу перейти к тому, AuthorView когда MenuLView нажимается Yazarlar, и к SearchView тому, когда нажимается Arama. Я хочу 10 разных назначений View .

Ответ №1:

Я изменил свой MenuListElement , чтобы иметь возможность отправлять представление внутри него.

 struct MenuListElement: Identifiable {
var id: Int {
    return elementID
}
var elementID: Int
var icon: String
var title: String
var color: Color
var numbers: Int
var view: Any
}
 

Я изменил свое List представление на

 List(MenuList.listData) { item in
            Button(action: {
                self.isOpen = true
            }) {
                MenuListElementView(item: item)
                    .fullScreenCover(isPresented: $isOpen) {
                        AnyView(_fromValue: item.view)
                    }
            }
        }
 

и изменил мой MenuList на

 struct MenuList {
static let listData: [MenuListElement] = [
    MenuListElement(elementID: 0, icon: Constants.IconNames.smileyFace, title: Constants.IconTitles.title1, color: Constants.Colors.gray, numbers: 2, view: MembershipView()),...
 

Таким образом, каждый элемент списка содержит информацию о представлении, поэтому с помощью кнопки я могу напрямую перейти к нужному представлению.