SwiftUI - 如何在单击时更改按钮的图像?

1 button swift swiftui

我试图做到这一点,当我点击一个按钮(这是其他按钮列表的一部分)时,被点击按钮的图像从“star”变为“star.fill”。请帮忙!

ForEach(pies, id: \.self) { pie in
      Button(action: {
          // some action
       }) {
       HStack {
           Image(systemName: "star")
           Text(pie)
           Spacer()
       }
}
Run Code Online (Sandbox Code Playgroud)

sta*_*ich 6

我有一个播放/暂停按钮。
按钮图像根据是否正在播放而变化。

在我的视图中,我有一个变量:

@State var isPlaying : Bool = false
Run Code Online (Sandbox Code Playgroud)

然后,每当您单击按钮时,isPlaying都会发生变化 -> 如果为真,则为假,反之亦然。按钮图像由 设置ternary operator

Button(action: {
   self.isPlaying.toggle()
}) {
    Image(systemName: self.isPlaying == true ? "pause.fill" : "play.fill")
          .resizable()
          .frame(width: 60, height: 60)
}
Run Code Online (Sandbox Code Playgroud)


paw*_*222 2

您可以使用@State变量来存储图像名称并在单击按钮时更改它:

@State var imageName: String = "star"

ForEach(pies, id: \.self) { pie in
      Button(action: {
          self.imageName = "star.fill"
       }) {
       HStack {
           Image(systemName: imageName)
           Text(pie)
           Spacer()
       }
}
Run Code Online (Sandbox Code Playgroud)

  • 在 SwiftUI 中,Button 似乎是少数不是基于 UIKit 构建的视图之一。好处是 SwiftUI 中的 Button 是一个非常灵活的结​​构。这样做的缺点是它不支持 UIKit 按钮内置的状态概念(以及用于单击/未单击的不同图像/标签),并且至少在当前版本的 SwiftUI 中,您确实需要正如 pawello2222 所说,从外部状态模型驱动按钮图像名称。 (2认同)