gpt4 book ai didi

ios - Swiftui 如何在 foreach 循环中为整行使用点击手势

转载 作者:行者123 更新时间:2023-12-04 00:14:03 25 4
gpt4 key购买 nike

我现在正在创建一个从 API 获取数据的 SearchBar,以红色突出显示的文本(见下图)是我想在 tap 时传递给我的 userDefault 字符串的内容。只要我点击突出显示的红色文本,这就会起作用,当您点击该行中的任何地方(例如空白处)时,是否可以获得该值?任何建议都会很棒。

@State var model: [SearchModel]
var defaults = UserDefaults.standard
@State var isOpen: Bool = false
以上是我的状态变量和我的用户默认值。我不会显示整个代码,因为问题仅在于下面的 .如您所见,我的值在 中foreach 我只是想拥有它,以便如果用户单击行的空白区域,我仍然可以执行此代码。
                     .onTapGesture {
isOpen = true
// I set the value here
defaults.setValue(value.name, forKey: "location")
}.fullScreenCover(isPresented: $isOpen, content: MainView.init)
上面的代码给了我正确的值,但它与文本相关联
       ZStack {
Color(UIColor.white)
.ignoresSafeArea()
ScrollView(showsIndicators: false) {
LazyVStack {
ForEach(model) { value in
VStack(alignment: .leading) {
HStack {
Text(value.name)
.font(.system(size: 15))
.background(Color.red)
.padding(.trailing, 10.0)
.onTapGesture {
isOpen = true
// I set the value here
defaults.setValue(value.name, forKey: "location")
}.fullScreenCover(isPresented: $isOpen, content: MainView.init)

}
HStack {
Text(value.statelong)
.foregroundColor(Color.gray)
.font(.system(size: 13))
Spacer()
}

}
VStack {
Spacer()
Divider()
}

}


}.padding(.leading, 20.0)


}

}
.listRowInsets(.none)
enter image description here

最佳答案

它仅适用于突出显示的文本,因为 onTapGesture位于 TextView 中。
1. 使用 HStack()
我会嵌入 VStack HStack 并添加一个 Spacer() 填充整个区域,然后放置 onTapGesture HStack , 像这样:

    ForEach(model) { value in
HStack{
VStack(alignment: .leading) {
HStack {
Text(value.name)
.font(.system(size: 15))
.background(Color.red)
.padding(.trailing, 10.0)
}
HStack {
Text(value.statelong)
.foregroundColor(Color.gray)
.font(.system(size: 13))
Spacer()
}

}
Spacer()
}.contentShape(Rectangle())
.onTapGesture {
isOpen = true
defaults.setValue(value.name, forKey: "location")
}.fullScreenCover(isPresented: $isOpen, content: MainView.init)
}
2. 使用 ZStack()
或者你可以使用 ZStack 制作全 View 背景并将 onTapGesture 放在 ZStack , 添加 .frame(maxWidth: .infinity) ZStack 填充整个可用宽度,如下所示:
 ForEach(model) { value in
ZStack {
VStack(alignment: .leading) {
HStack {
Text(value.name)
.font(.system(size: 15))
.background(Color.red)
.padding(.trailing, 10.0)
}
HStack {
Text(value.statelong)
.foregroundColor(Color.gray)
.font(.system(size: 13))
Spacer()
}

}
Spacer()
}.contentShape(Rectangle())
.frame(maxWidth: .infinity)
.onTapGesture {
isOpen = true
defaults.setValue(value.name, forKey: "location")
}.fullScreenCover(isPresented: $isOpen, content: MainView.init)
}

关于ios - Swiftui 如何在 foreach 循环中为整行使用点击手势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65100077/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com