【问题标题】:How to change the image of a navigation button when tapped 3 times?点击 3 次时如何更改导航按钮的图像?
【发布时间】:2015-08-31 13:14:54
【问题描述】:

当用户点击 3 次时,我需要在导航栏中更改 UIButton 的图像。每次点击都会显示不同的 UIImage 及其对应的集合视图。我让动画集合视图完美运行,但是...

如何在 Swift 中更改按钮图像?

我尝试了多种方法,但似乎无法使其正常工作,例如:

@IBAction func buttonTapped(sender: UIButton) {

    if let myButton = UIImage(named:"btn1") {
        sender.setImage(myButton, forState: .Normal)
    }
    if let myButton = UIImage(named:"btn2") {
        sender.setImage(myButton, forState: .Normal)
    }
    if let myButton = UIImage(named:"btn3") {
        sender.setImage(myButton, forState: .Normal)
    }
}

有很多关于将 uibutton 更改为两种状态的帖子,例如秒表或播放/暂停,但我需要导航栏中的 3 种状态。

谢谢!

【问题讨论】:

    标签: swift uibutton uicollectionview uinavigationbar


    【解决方案1】:

    我认为有两种简单的方法可以做到这一点:

    1. 你可以在你的类中设置一个变量 Int 并计算它直到它为 2,然后再将它设置为 0,如下所示:

        var buttonCounter: Int = 0
      
      @IBAction func buttonTapped(sender: UIButton) {
      
      if buttonCounter == 0{
          let myButton = UIImage(named:"btn1")
          sender.setImage(myButton, forState: .Normal)
          buttonCounter++
      }
      else if buttonCounter == 1 {
          let myButton = UIImage(named:"btn2")
          sender.setImage(myButton, forState: .Normal)
          buttonCounter++
      }
      else {
          let myButton = UIImage(named:"btn3")
          sender.setImage(myButton, forState: .Normal)
          buttonCounter = 0
        }
      }
      
    2. 您可以执行几乎相同的操作,但您可以使用 UIButton 的 .tag 属性而不是使用变量。标签是一个整数,通常用于找出哪个按钮调用了 IBAction,但您只有一个按钮调用该函数,因此您可以像这样使用它:

      @IBAction func buttonTapped(sender: UIButton) {
      
      if sender.tag == 0{
          let myButton = UIImage(named:"btn1")
          sender.setImage(myButton, forState: .Normal)
          sender.tag++
      }
      else if sender.tag == 1 {
          let myButton = UIImage(named:"btn2")
          sender.setImage(myButton, forState: .Normal)
          sender.tag++
      }
      else {
          let myButton = UIImage(named:"btn3")
          sender.setImage(myButton, forState: .Normal)
          sender.tag = 0
      }
      }
      

    【讨论】:

    • 谢谢 M。看起来不错。很难让它工作。不确定是不是因为按钮在导航栏中?错误是“[UIBarButtonItem setImage:forState:]: unrecognized selector sent to instance”
    • 该链接完全是大杂烩。 ;) 帮助不大,尽管我确实尝试检查 NSWindow 内存管理、重新连接事件处理程序(出口和操作)、删除按钮的目标操作、检查 SB 中的类,并三重检查拼写错误。我认为这是因为它是一个条形按钮项,并且 UIBarButtonItem 没有从 UIButton 继承,所以 setImage:forState 不会按建议工作。
    • 我不确定,但可能是您设置了一个插座,将其删除,然后忘记在视图控制器上断开它?
    • 我让它工作了。我所做的只是将 UIControlState 添加到 .Normal。谢谢!
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2015-09-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多