【问题标题】:SwiftUI: I have a list which when I click on an object I want to go into a detail view where I can select or deselect the current objectSwiftUI:我有一个列表,当我单击一个对象时,我想进入一个详细视图,我可以在其中选择或取消选择当前对象
【发布时间】:2020-10-03 11:12:01
【问题描述】:

我可以很好地设置列表,甚至在详细视图 (CardView) 中有一个选择或取消选择按钮。我遇到的问题是当我单击选择时,我想将其添加到数组(cardSelected)中。如果“name3”是列表中的第一个,我如何找出要添加到 cardSelected 数组的索引? 我是编程新手,所以正在寻找一些指导。谢谢

import Foundation
import SwiftUI

class Cards: ObservableObject {

    @Published var cardSelected = [gameCards]()
    @Published var playerCards = [gameCards]()
    @Published var playerGameCards = [
        gameCards(id: 1, name: "name1", attack: 92, defence: 49, gameControl: 60, creativity: 72, legend: 4),
        gameCards(id: 2, name: "name2", attack: 87, defence: 40, gameControl: 65, creativity: 80, legend: 2),
        gameCards(id: 3, name: "name3", attack: 43, defence: 93, gameControl: 40, creativity: 45, legend: 3),
        gameCards(id: 4, name: "name4", attack: 88, defence: 51, gameControl: 80, creativity: 92, legend: 5),
        gameCards(id: 5, name: "name5", attack: 85, defence: 51, gameControl: 72, creativity: 81, legend: 3),
        gameCards(id: 6, name: "name6", attack: 91, defence: 38, gameControl: 72, creativity: 89, legend: 5),
        gameCards(id: 7, name: "name7", attack: 34, defence: 95, gameControl: 40, creativity: 50, legend: 5),
        gameCards(id: 8, name: "name8", attack: 86, defence: 63, gameControl: 89, creativity: 84, legend: 4),
        gameCards(id: 9, name: "name9", attack: 90, defence: 30, gameControl: 50, creativity: 83, legend: 5),
        gameCards(id: 10, name: "name10", attack: 32, defence: 92, gameControl: 42, creativity: 32, legend: 4)
    ]
}
struct gameCards: Identifiable {

    let id: Int
    let name: String
    let attack: Int
    let defence: Int
    let gameControl: Int
    let creativity: Int
    let legend: Int


import SwiftUI


struct CardView: View{

    var carddetail: String
    @EnvironmentObject var cardselected: Cards
    @State var cardSelect: Bool = false



    var body: some View{
        ZStack{
            VStack{

                Text(carddetail)
                Spacer()

                if cardSelect == false {

                    Button(action:{

                    self.cardSelect = true

下面??是我想添加索引但不知道如何以编程方式找到它的位置。

                    self.cardselected.cardSelected.append(self.cardselected.playerCards[??])
                    print("\([self.carddetail])")
                    print("\([self.cardselected.cardSelected.description])")

                    }){

                        if cardSelect == false {
                        Image(systemName: "star")

                        }

                        if cardSelect == true{
                        Image(systemName: "star.fill")
                        }

                    }
                }

                if cardSelect == true {
                    Button(action:{

                        self.cardSelect = false

                    }){

                        if cardSelect == false {
                            Image(systemName: "star")

                        }

                        if cardSelect == true{
                            Image(systemName: "star.fill")
                        }

                    }

                }


                Spacer()
            }
        }
    }
}


struct ContentView: View {

    @EnvironmentObject var playerList: Cards


    var body: some View {

        NavigationView{

            ZStack{

                Image("Background").resizable().edgesIgnoringSafeArea(.all)

                VStack{

                    Image("FLTitle").resizable().frame(width: 400, height: 100)
                    Spacer()
                    Text("Collected Cards")
                    Text("Choose 5")

                    ScrollView(.horizontal){
                        HStack{
                            Image("Back")
                            Image("Back")
                            Image("Back")
                            Image("Back")
                            Image("Back")

                        }.padding(.horizontal)
                    }

                    Spacer()

                    HStack{
                        NavigationView{

                            List(playerList.playerCards) {gc in
                                NavigationLink(destination: CardView(carddetail: gc.name)){
                                    Text("\(gc.name)")

                                }

                            }.navigationBarTitle("Card detail").font(.body)

                        }.padding(.leading).frame(width: UIScreen.main.bounds.size.width/2, height: 200)
                            Text("Opposition").padding(.trailing).frame(width: UIScreen.main.bounds.size.width/2, height: 200).background(Color.red)

                    }
                    Spacer()

                }

            }

        }.navigationBarTitle("", displayMode: .inline).navigationBarBackButtonHidden(true).navigationBarHidden(true)

    }
}


let data = Cards()
struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView().environmentObject(data)
    }
}

【问题讨论】:

    标签: arrays list indexing swiftui


    【解决方案1】:

    创建List时可以使用ForEach访问索引,然后传递给CardView

     List {
              ForEach(0..<playerList.playerCards.count) { index in
                     NavigationLink(destination: CardView(carddetail: self.playerList.playerCards[index].name, 
                                                               index: index)) {
                          Text("\(self.playerList.playerCards[index].name)")
                     }
              }.navigationBarTitle("Card detail").font(.body)
     }
    

    【讨论】:

    • 谢谢。我收到一条错误消息,提示“调用中的额外参数'索引'”。这是来自索引:索引。
    • @Mamco 你必须添加'index'作为'CardView'的属性,然后在需要的地方使用它
    • 是的,抱歉半夜醒来,我意识到:-)。再次感谢索林。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多