Código: Eu só quero marcar a visualização do botão selecionado e preciso do schoolCode do botão selecionado , mas no meu código também tenho uma marca de seleção e o código do botão selecionado, mas se eu selecionar o botão, sua posição muda... se eu selecionar o terceiro botão, ele vai para o segundo lugar assim... por favor, corrija esse erro.
ScrollView(.horizontal, showsIndicators: false) {
HStack {
if let retrievedArray = UserDefaults.standard.stringArray(forKey: "SavedSchoolCodes") {
let uniqueItems = Array(Set(retrievedArray))
ForEach(uniqueItems, id: \.self) { item in
if let school = schoolList.first(where: { $0.schoolCode == item }) {
Button {
viewModel.schoolCode = school.schoolCode ?? ""
} label: {
ZStack {
let correctedPhotoURL = school.logo?.replacingOccurrences(of: "//SchImg", with: "/SchImg") ?? ""
VStack {
URLImageView(url: correctedPhotoURL, placeholder: "NoProfilePic", width: 50, height: 50)
.clipShape(Circle())
.padding(.bottom, 4)
Text(school.schoolCode ?? "")
.font(.headline)
.foregroundColor(.black)
}
.frame(width: 100, height: 120)
.background(Color.gray.opacity(0.2))
.cornerRadius(10)
RoundedRectangle(cornerRadius: 10)
.stroke(viewModel.schoolCode == school.schoolCode ? Color.green : Color.clear, lineWidth: 2)
.frame(width: 100, height: 120)
if viewModel.schoolCode == school.schoolCode {
Image(systemName: "checkmark.circle.fill")
.resizable()
.frame(width: 20, height: 20)
.foregroundColor(.green)
.offset(x: 35, y: -45)
}
}
}
.padding(5)
} else {
Text("\(item),")
}
}
} else {
Text("No array found in UserDefaults.")
}
}
.padding(.horizontal)
}
o/p: quando eu seleciono, quero apenas marcar, é isso. Por favor, oriente para corrigir a mudança de posição.
Você está convertendo a lista de códigos escolares em um
Set
, então você itera sobre o conjunto e encontra o correspondenteSchool
para cada código.A
Set
é uma coleção não ordenada. A ordenação das escolas na sua view é, portanto, imprevisível e, de fato, parece mudar quando a view é renderizada novamente para mostrar a escola selecionada.Tente classificar a matriz que você criou a partir de
Set
: