点击 3 次时如何更改导航按钮的图像?

Posted

技术标签:

【中文标题】点击 3 次时如何更改导航按钮的图像?【英文标题】:How to change the image of a navigation button when tapped 3 times? 【发布时间】: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 种状态。

谢谢!

【问题讨论】:

【参考方案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
      
    
    

    您可以执行几乎相同的操作,但您可以使用 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” 查看***.com/questions/2455161/… 寻求帮助 该链接完全是大杂烩。 ;) 帮助不大,尽管我确实尝试检查 NSWindow 内存管理、重新连接事件处理程序(出口和操作)、删除按钮的目标操作、检查 SB 中的类,并三重检查拼写错误。我认为这是因为它是一个条形按钮项,并且 UIBarButtonItem 没有从 UIButton 继承,所以 setImage:forState 不会按建议工作。 我不确定,但可能是您设置了一个插座,将其删除,然后忘记在视图控制器上断开它? 我让它工作了。我所做的只是将 UIControlState 添加到 .Normal。谢谢!

以上是关于点击 3 次时如何更改导航按钮的图像?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用导航抽屉打开和关闭更改按钮图像

如何更改 iOS 13 导航栏中的后退按钮图像?

单击下一步按钮如何更改图像

更改 UINavigationBar 按钮图像

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

在swift UI中点击按钮时如何更改背景颜色和图像?