View SwiftUI OnTap手势显示新视图
我正在使用SwiftUI制作自己的比萨饼递送应用程序。我现在被卡住了,因为我不知道如何显示与他自己的数组索引相关的相同图像视图(包括比萨饼的描述)。我希望每次用户点击数组中的图像时,它都会显示带有简短文本描述的相同图像,而不是行View SwiftUI OnTap手势显示新视图,view,swiftui,View,Swiftui,我正在使用SwiftUI制作自己的比萨饼递送应用程序。我现在被卡住了,因为我不知道如何显示与他自己的数组索引相关的相同图像视图(包括比萨饼的描述)。我希望每次用户点击数组中的图像时,它都会显示带有简短文本描述的相同图像,而不是行{self.images print(“ok”)}。对我的问题的描述是否足够清楚?如果有人能帮我解决这个问题,我将不胜感激。非常感谢您的阅读。代码如下: HStack { ForEach(images, id: \.id) { post in Fo
{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()
HStack{
ForEach(图像,id:\.id){post-in
ForEach(0..假设您的项有一个结构
,则需要将其与可识别的:
struct Item: Identifiable {
var id: String { name } // needed for `Identifiable`
let name: String
let imageName: String
let description: String
}
struct Item: Hashable
那么在你的主要观点中:
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 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 Item: Identifiable {
var id: String { name } // needed for `Identifiable`
let name: String
let imageName: String
let description: String
}
struct Item: Hashable
或者代替:
ForEach(items, id: \.self)
明确指定id
:
ForEach(items, id: \.name)
我也尝试了一下,为了它的价值
(顺便说一句,pawello2222的答案也是100%正确的。实现您所描述的目标有多种方法)
我首先创建了一个比萨饼菜单(使用占位符图像):
从菜单中选择一个项目后,您将看到所选的比萨饼详情:
我正在使用NavigationView
和NavigationLink
在视图之间导航
以下是完整的源代码(为了在Swift操场上获得最佳运行效果):
导入PlaygroundSupport//仅用于在Swift游乐场跑步
导入快捷键
//主比萨饼列表页面(视图)
结构PizzaList:视图{
//比萨饼图像数组
让Pizza图像=[
图像(系统名称:“circle.fill”),
图像(系统名称:“square.fill”),
图像(系统名称:“三角形填充”)
]
//比萨饼描述数组
让比萨饼描述=[
“圆形比萨饼”,
“方形比萨饼”,
“三角披萨”
]
var body:一些观点{
//在导航视图中换行,以便能够在“页面”之间切换
导航视图{
VStack{
ForEach(0..
您的问题还不够清楚-您希望如何显示新视图?作为一张图纸,带有导航链接…?当触发“.ontap手势”时,我希望阵列中的每个图像在完全相同的页面上显示相同的图像。我知道我必须使用“位置属性”但是我不知道怎么做。请提供帮助?所以你有一组图像(开头没有描述)当用户点击一个特定的图像时,你想用它的描述来显示这个图像,还是我遗漏了什么?是的,这正是我想做的!有什么想法吗?你想让它显示为现有图像数组上的一个新窗口吗?还是只向所选图像添加一个描述行?而不是两个sepa速率阵列(比萨图像、比萨描述)最好是创建一个将所有内容都放在一起的结构。使用单独的数组,处理索引是有风险的-在添加新图像时,您可能很容易忘记添加描述。而且您只检查pizzaImages.count
-如果pizzaDescriptions.count
更小怎么办?非常感谢您的贡献。谢谢非常感谢您的贡献!不幸的是,这不是我想要做的。因为一旦点击图像,我不知道会打开什么新窗口。我希望它在完全相同的页面中显示相同的图像(与其自身的数组索引相关),并带有简短的文本描述。因此,基本上,我知道我必须使用“位置属性”在“OnTap手势”括号中。但是非常感谢您的回答。非常感谢您的贡献!不幸的是,这不是我想要的
ForEach(items, id: \.name)