gpt4 book ai didi

swiftui - onTapGesture 不适用于自定义 View

转载 作者:行者123 更新时间:2023-12-03 08:09:03 51 4
gpt4 key购买 nike

我试图在选择按钮时更改按钮的颜色。当我按下按钮时没有任何变化。似乎 .onTapGesture 不适用于自定义 View 。

我尝试使用按钮而不是 .onTapGesture,但它也不起作用。 .contentShape 不起作用。我也尝试过使用列表,效果很好。但我认为还有更好的方法。

import SwiftUI

struct UserSettings: View {


@State private var selectedIndex: Int = 0

var body: some View {

VStack {

HStack(spacing: 0) {

ForEach(0..<3) { subIndex in
let pat = customPatterns1[subIndex]

PatternOptionView(pat: pat, isSelected: subIndex == selectedIndex)
.contentShape(Rectangle())


.onTapGesture(perform: {
selectedIndex = subIndex
})
}
}


}

}

}

struct UserSettings_Previews: PreviewProvider {
static var previews: some View {
UserSettings()
}
}

我的自定义 View :

    import SwiftUI

struct PatternOptionView: View {
var pat: PatternView
var isSelected: Bool

var body: some View {
Button(action: {
Settings.shared.pattern = pat.pattern
}) {
VStack{
Rectangle()
.fill(isSelected ? Color("Primary") : .white)
.frame(width: UIScreen.main.bounds.width / 3, height: UIScreen.main.bounds.width / 3)
.cornerRadius(15)
.contentShape(Rectangle())

.overlay(
Image(systemName: pat.image)
.font(.system(size: 28))
.foregroundColor(isSelected ? .white : Color("Primary"))
)


Text(pat.text)
.foregroundColor(.secondary)
.lineLimit(1)
}

//.padding()
}.contentShape(Rectangle())


}
}

struct PatternOptionView_Previews: PreviewProvider {
static var previews: some View {
PatternOptionView(pat: customPatterns1[0], isSelected: true)
}
}

最佳答案

就我而言,我可以通过设置 contentShape 来使其工作:

PatternOptionView(pat: pat, isSelected: subIndex == selectedIndex)
.contentShape(Rectangle())
.onTapGesture(perform: {
selectedIndex = subIndex
})

关于swiftui - onTapGesture 不适用于自定义 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71379450/

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