- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试重新实现我正在使用的 SegmentedControlers,因为它们在 Xcode 11 beta 5 中已被弃用。这花了一段时间但我得到了我想要的外观。但是,当我用 onTapGesture() 替换 tapAction 时,选择器停止工作。
下面的代码显示了问题。注释掉 pickerStyle 会得到一个与 onTapGesture() 一起工作的轮选择器
import SwiftUI
var oneSelected = false
struct ContentView: View {
@State var sel = 0
var body: some View {
VStack {
Picker("Test", selection: $sel) {
Text("A").tag(0)
Text("B").tag(1)
Text("C").tag(2)
}
.pickerStyle(SegmentedPickerStyle())
Picker("Test", selection: $sel) {
Text("A").tag(0)
Text("B").tag(1)
Text("C").tag(2)
}
.pickerStyle(SegmentedPickerStyle())
.onTapGesture(perform: {
oneSelected = (self.sel == 1)
})
Text("Selected: \(sel)")
}
}
}
#if DEBUG
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
#endif
最佳答案
tapGesture
您添加的干扰选择器的内置点击手势识别,这就是为什么您的 .onTapGesture
中的代码runs when the picker is tapped, but the picker itself is not responding to taps.在您的情况下,我建议采用不同的方法:传递符合 ObservableObject
的 View 模型进入您的 ContentView
,并让它包含一个 @Published
选择器选择的变量。然后向该变量添加一个属性观察器,以检查所选选项是否为 1。
例如:
class ViewModel: ObservableObject {
@Published var sel = 0 {
didSet {
oneSelected = oldValue == 1
}
}
var oneSelected = false
}
SceneDelegate.swift
, 或任何地方
ContentView
声明:
ContentView().environmentObject(ViewModel())
ContentView.swift
:
@EnvironmentObject var env: ViewModel
var body: some View {
VStack {
Picker("Test", selection: $env.sel) {
Text("A").tag(0)
Text("B").tag(1)
Text("C").tag(2)
}
.pickerStyle(SegmentedPickerStyle())
Picker("Test", selection: $env.sel) {
Text("A").tag(0)
Text("B").tag(1)
Text("C").tag(2)
}
.pickerStyle(SegmentedPickerStyle())
Text("Selected: \(sel)")
}
}
SegmentedControl
在以前的测试版中导致
SegmentedControl
没有响应,所以我不确定为什么它在以前的版本中对你有用。从 SwiftUI beta 5 开始,我认为没有办法为手势分配优先级。
.highPriorityGesture()
使您的手势优先于 View 中定义的手势,但您的手势具有更高的优先级会导致您的问题。但是,您可以使用
.simultaneousGesture()
,我认为这将是您问题的解决方案,但我不认为它在 SwiftUI Beta 5 中功能齐全。
关于swiftui - 带有 onTapGesture 的分段选取器不响应点击,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57272066/
在下面的代码中,我想不必添加undefined作为filteredDevice的类型注解。我认为一个被过滤的设备不应该是未定义的,因为我过滤掉了未定义的设备。 但是如果我删除 undefined类型注
我有一个 UIButton,其文本来自服务器。按钮的宽度是固定的。我想要的是,如果按钮的文本超过按钮的宽度,文本应该在按钮内选取框。如果文本适合按钮宽度,则不应有选取框效果。 我点击了一些链接(one
我正在从头开始实现 webgl 选取,并决定走 GLSL 路线,而不是光线相交测试。 所以我将整个场景渲染到一个单独的帧缓冲区中,为每个对象分配一个唯一的颜色,该颜色作为统一变量传递给片段着色器。当场
例如,我有包含多个对象的数组, var arr = ["a", "b", "c", "d"]; 我想要的是从该数组中选取 2 个随机对象,例如“a”和“c”,并将这 2 个对象推送到另一个数组中,例如
我是一名优秀的程序员,十分优秀!