基于uibutton图像的IOS SWIFT调用代码块

时间:2015-03-04 03:17:21

标签: ios swift uibutton uiimage

这是我试图让它工作的代码。我的目标是根据按钮的图像调用一段代码。该按钮根据之前的图像更改图像。

@IBOutlet weak var startFuncAButton: UIButton!

let navBtn = UIImage (named: "ArrowStraight")
let greenTimer = UIImage (named: "Timer")
let redTimer = UIImage (named: "TimerStop")

    @IBAction func startFuncA(sender: UIButton) {
    if self.startFuncAButton.imageView == greenTimer {
        println("button's image is green timer")
    }
    else if self.startFuncAButton.imageView == redTimer {
        println("button's image is red timer")
    }
    else if self.startFuncAButton.imageView == navBtn {
        println("button's image is arrow")
        NSLog("Start Navigation Button Pressed")
        self.navBar.hidden = true
        self.navigator = Navigator(route: self.route!)
        self.navigator?.HUD_delegate = self.navigationHUDView
        self.navigator?.locationUpdateDelegate = self
        self.navigationHUDView.hidden = false
        self.navigationHUDView.directionImageView.image = UIImage(named: "ArrowStraight")
        self.navigationHUDView.navigator = self.navigator
        self.navigationHUDView.backgroundColor = UIColor(red: 0.12, green: 0.13, blue: 0.16, alpha: 1.0)
        self.startFuncAButton.setImage(UIImage(named: "Timer"), forState: .Normal)

但是当我在应用程序中按下此按钮时,没有任何反应。没有打印行发送到控制台。显然,我没有正确地做条件。如何根据IOS Swift中的图像执行代码?

为了回答第一条评论,我扩展了我的代码段。正如您在最后一行中看到的那样,图像设置为" Timer"和#34; ArrowStraight"两行(来自let语句)。

2 个答案:

答案 0 :(得分:3)

  1. UIButton的'imageView'是一个UIImageView。你试图把它等同于UIImage。它们永远不会是同一个对象。

  2. 依靠按钮的图像来执行条件代码是一种非常糟糕的实现方式。 UI(在您的情况下是要设置的图像)应该取决于代码/逻辑(MVC基础知识)。如果您基于图像执行条件代码,则您的逻辑取决于UI。

  3. 您应该有一个表示当前执行状态的标志(枚举)。您应该设置按钮的图像,并根据标记在按钮上执行代码。

    枚举TimerStatus:String {

    案例格林=“绿色”

    案例Red =“Red”

    case Stopped =“Stopped”

    }

  4. 您可以在声明枚举变量时设置默认状态:

    var timerStatus : TimerStatus = .Green
    
    
    switch timerStatus {
    case .Green:
        // Green status code
    case .Red:
        // Red status code
    case .Stopped:
        // Stopped status code
    }
    

答案 1 :(得分:1)

您正在测试UImageView是否等于UIImage。这样做:

self.startFuncAButton.imageView.image == greenTimer