我现在正在创建一个从API获取数据的SearchBar,红色高亮显示的文本(见下图)是我想在点击时传递到我的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)
上面的代码提供了正确的值,但它与Text绑定在一起
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)
2条答案
按热度按时间hkmswyz61#
它只适用于高亮显示的文本,因为
onTapGesture
位于Text视图中。1.使用
HStack()
我会将**
VStack
嵌入到HStack
中,并添加一个Spacer()
来填充整个区域,然后将onTapGesture
放置到HStack
**中,如下所示:2.使用
ZStack()
****或者您可以使用**
ZStack
来创建一个完整的视图背景,并将onTapGesture放置在ZStack
上,将.frame(maxWidth: .infinity)
添加到ZStack
**以填充整个可用宽度,如下所示:mfuanj7w2#
只需将
.contentShape(Rectangle())
ViewModifier添加到您的HStack
,无需其他操作