如何通过按下其他按钮来更改一个按钮的图像?

how to change image of one button by pressing other buttons?

在 viewcontroller 我有 101 个按钮。如果按下前 100 个按钮中的一个,我想更改按钮编号 101 的图像(我在这个项目中有 100 个图像;image1、image2、image3 等)

所以我通过给每个按钮一个 0-100 的标签然后根据 sender.tag

制作一个 switch 语句来做到这一点
@IBOutlet weak var button101 : UIButton!

var i = 1

  // I hooked up all the other 100 buttons to a single IBAction
  @IBAction func buttonTapped(sender: UIButton) {

 switch sender.tag {

case 0:  i = 1

  let image = UIImage (named: "image\(i)")
  button101.setImage(image, forState:.Normal)

case 1:   i = 2

  let image = UIImage (named: "image\(i)")
  button101.setImage(image, forState:.Normal)

case 2:   i = 3

 let image = UIImage (named: "image\(i)")
  button101.setImage(image, forState:.Normal)

case ..: // etc. until case 99 (because button 100 has tag 99)

default: break

这个超级丑陋的代码有效:它将按钮编号 101 的图像更改为指定的图像 (i)。但我想要一个更优雅更好的解决方案。

我有两个问题:

  1. 如何以更好的方式(在 IBAction 之外)初始化 'image' constant/variable?
  2. 使用什么样的(循环)语句来代替这个大的 switch 语句? 所以:我想确定按下了哪个按钮,然后更新 var i 的值,遍历图像并使用图像 (i) 查找和更新 button101 的图像。

我希望我的问题很清楚。如果不是,请告诉我。 非常感谢您的帮助!

您的 switch 语句与以下行为相同:

if sender.tag < 100 {
    let image = UIImage (named: "image\(sender.tag + 1)")
    button101.setImage(image, forState:.Normal)
}

如果愿意,您可以将 UIImagevar UIImage: UIImage! 放在 ViewController 的顶部,但我看不出有任何理由这样做。