根据 Swift Xcode 中的变量将 UI 图像更改为特定图像

Changing UI Image to a specific image depending on variable in Swift Xcode

我想根据变量更改图像,我不确定该怎么做。

我认为我的代码是正确的,但是在 iOS 模拟器中,图像显示为空白。我想知道为什么?

下面是我的代码:

import UIKit

class BuyTicketViewController: UIViewController {

@IBOutlet weak var stadiumImage: UIImageView!
@IBOutlet weak var logoImage: UIImageView!

override func viewDidLoad() {
    super.viewDidLoad()

    if (globalVenueSelected == "Gillingham Football Club"){
        let imageGillinghmaFootballClub : UIImage = UIImage(named: "gillinghamStadium.jpg")!
        let stadiumImage = (image: imageGillinghmaFootballClub)

    }
    if (globalVenueSelected == "Old Trafford"){
        let imageOldTraffordFootballClub : UIImage = UIImage(named: "oldTraffordStadium.jpg")!
        let stadiumImage = (image: imageOldTraffordFootballClub)

    }
    if (globalVenueSelected == "Emirates Stadium"){
        let imageEmiratesFootballClub : UIImage = UIImage(named: "emiratesStadium.jpg")!
        let stadiumImage = (image: imageEmiratesFootballClub)

    }
    if (globalVenueSelected == "Wembley"){
        let imageWembley : UIImage = UIImage(named: "wemblyStadium.jpg")!
        let stadiumImage = (image: imageWembley)

    }
    if (globalVenueSelected == "O2 Arena"){
        let imageO2Arena : UIImage = UIImage(named: "o2ArenaStadium.jpg")!
        let stadiumImage = (image: imageO2Arena)
    }



}

override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}


/*
// MARK: - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
override func prepareForSegue(segue: UIStoryboardSegue, sender: AnyObject?) {
    // Get the new view controller using segue.destinationViewController.
    // Pass the selected object to the new view controller.
}
*/


}

哦,顺便说一下,变量 globalVenueSelected 是一个全局变量,我不知道它是否会影响任何东西,但它可能会更改代码。

感谢任何帮助,谢谢。

试试下面的代码。

override func viewWillAppear(animated: Bool) {
    super.viewWillAppear(animated)

    var imageName: String!

    switch globalVenueSelected {
    case "Gillingham Football Club":
        imageName = "gillinghamStadium.jpg"

    case "Old Trafford":
        imageName = "oldTraffordStadium.jpg"

    case "Emirates Stadium":
        imageName = "emiratesStadium.jpg"

    case "Wembley":
        imageName = "wemblyStadium.jpg"

    case "O2 Arena":
        imageName = "o2ArenaStadium.jpg"

    default: break
    }

    self.stadiumImage.image = UIImage(named: imageName)
}

您应该将 switch 语句放在 viewWillAppear(:) 中,因为您的 IBOutlet 可能未在 viewDidLoad 中设置。

另外,许多人认为最好的做法是使用反映该变量类型的变量名。例如,

  • stadiumImage 应重命名为 stadiumImageView.
  • 同样,logoImage 应重命名为 logoImageView

正确命名您的变量名将使您和其他人更容易阅读、理解和维护您的代码。

此外,默认情况下,项目的资产目录通常不接受 .jpg 文件。您可以将体育场图像转换为 .png 格式,然后在设计时将它们添加到您的资产目录中,或者您可以参考 this Stack Overflow answer 了解如何让您的资产目录接受非 PNG 资产。