我有一个简单的按钮,可以按预期在模拟器上工作,形状随着点击而改变;
struct ButtonTest: View {
@State var isLiked = true
var body: some View {
VStack {
LikeButtonSimple( action: toggleLiked, isLiked: $isLiked)
}
}
func toggleLiked() {
isLiked.toggle()
print("Liked Button: \(isLiked)")
}
}
struct LikeButtonSimple: View {
let dimen = 50.0
let dimenHalf = CGFloat(28)
var action: () -> Void?
@Binding var isLiked : Bool
var body: some View {
ZStack {
Circle()
.frame(width: dimen, height: dimen)
.foregroundColor(.white )
.shadow(color: .black, radius: 2, y: 2)
Button( action: {
action()
}
) {
Image(systemName: isLiked ? "heart.fill" : "heart")
.resizable()
.foregroundColor(isLiked ? .red : .gray)
.frame(width: dimenHalf, height: dimenHalf)
}
}
}
}
我也想在
Preview
上看到相同的行为,并为此写下了以下内容;
struct LikeButtonSimple_Previews: PreviewProvider {
@State static var isLiked = true
static func toggleLiked() {
isLiked.toggle()
}
static var previews: some View {
LikeButtonSimple( action: toggleLiked, isLiked: $isLiked)
}
}
按钮不再切换。我们可以使用这个 PreviewProvider 在 Preview 上工作吗?
我觉得你根本不需要这里的动作
绑定是与某些数据的双向连接。
通过使用绑定,您传递给它的视图可以对其进行更新。
所以你不需要结合和行动。按钮动作应该只是……
isLiked.toggle()
这足以更新视图和更新“父”视图中的值。