SwiftUI를 사용하여 내 피자 배달 응용 프로그램을 만들고 있습니다. 나는 배열에서 자신의 색인과 관련된 동일한 이미지보기 (피자 설명 포함)를 어떻게 표시 할 수 있는지 모르겠 기 때문에 이제 막혔습니다. 줄 대신 {self.images print("ok")}
사용자가 배열에서 이미지를 탭할 때마다 짧은 텍스트 설명과 함께 동일한 이미지가 표시되기를 바랍니다. 내 문제에 대한 설명이 충분히 명확합니까? 누군가 나를 도울 수 있다면 대단히 감사하겠습니다. 읽어 주셔서 감사합니다. 다음은 코드입니다.
HStack {
ForEach(images, id: \.id) { post in
ForEach(0..<1) { _ in
ImageView(postImages: post)
}
}
Spacer()
}
.onTapGesture {
self.images
print("ok")
}
.navigationBarTitle("Choose your Pizza")
.padding()
에 대한 구조체가 있다고 가정하면 다음 Item
을 준수해야합니다 Identifiable
.
struct Item: Identifiable {
var id: String { name } // needed for `Identifiable`
let name: String
let imageName: String
let description: String
}
그런 다음 기본보기에서 :
struct ContentView: View {
let items = [
Item(name: "item1", imageName: "circle", description: "some description of item 1"),
Item(name: "item2", imageName: "circle", description: "some description of item 2"),
Item(name: "item3", imageName: "circle", description: "some description of item 3"),
]
@State var selectedItem: Item? // <- track the selected item
var body: some View {
NavigationView {
HStack {
ForEach(items, id: \.id) { item in
ImageView(imageName: item.imageName)
.onTapGesture {
self.selectedItem = item // select the tapped item
}
}
Spacer()
}
.navigationBarTitle("Choose your Pizza")
.padding()
}
.sheet(item: $selectedItem) { item in // show a new sheet if selectedItem is not `nil`
DetailView(item: item)
}
}
}
이미지에 대한 사용자 정의보기가있는 경우 :
struct ImageView: View {
let imageName: String
var body: some View {
Image(systemName: imageName)
}
}
항목에 대한 상세보기를 만들 수 있습니다 (항목 설명 등) :
struct DetailView: View {
let item: Item
var body: some View {
VStack {
Text(item.name)
Image(systemName: item.imageName)
Text(item.description)
}
}
}
편집하다
다음은 동일한보기를 사용하여 이미지 또는 설명과 함께 이미지를 표시하는 다른 접근 방식입니다.
struct ContentView: View {
@State var items = [
Item(name: "item1", imageName: "circle", description: "some description of item 1"),
Item(name: "item2", imageName: "circle", description: "some description of item 2"),
Item(name: "item3", imageName: "circle", description: "some description of item 3"),
]
var body: some View {
NavigationView {
HStack {
ForEach(items, id: \.self) { item in
DetailView(item: item)
}
Spacer()
}
.navigationBarTitle("Choose your Pizza")
.padding()
}
}
}
struct DetailView: View {
@State var showDescription = false
let item: Item
var body: some View {
VStack {
Text(item.name)
Image(systemName: item.imageName)
if showDescription {
Text(item.description)
}
}
.onTapGesture {
self.showDescription.toggle()
}
}
}
와 일치 Item
합니다 Hashable
:
struct Item: Hashable
또는 대신 :
ForEach(items, id: \.self)
id
명시 적으로 지정하십시오 .
ForEach(items, id: \.name)
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다