【问题标题】:Change UIBarButtonItem Icon after pressed iOS swift按下iOS swift后更改UIBarButtonItem图标
【发布时间】:2016-04-05 04:36:30
【问题描述】:

viewDidload 方法中,我声明了一个按钮并设置了 RightBarButton...

    let btnFavourite = UIButton(frame: CGRectMake(0,0,30,30))
    btnFavourite.addTarget(self, action: "btnFavourite:", forControlEvents: .TouchUpInside)
    btnFavourite.setImage(UIImage(named: "star"), forState: .Normal)
    btnFavourite.setImage(UIImage(named: "star_filled"), forState: .Highlighted)
    let rightButton = UIBarButtonItem(customView: btnFavourite)
    self.navigationItem.setRightBarButtonItems([rightButton], animated: true)

如何从图像“star.png”按下按钮然后更改为“star_filled.png”?并按下从“star_filled.png”到“star.png”的按钮?

如何使两个函数像

func btnFavourite()
{
    //clicked the favourite button then image change to star_filled.png
}

fun btnUnfavourite()
{
    //clicked the button then the bar button image change to star.png
}

【问题讨论】:

  • 你已经设置了回调btnFavourite,你有没有尝试改变那里的图像?
  • 您拥有的代码应该可以正常工作,实际上突出显示的状态会在您触摸一次并松开手时改变图像,就像悬停动作一样。你想达到什么目标是明确的朋友。
  • @luk2302 在那里的 btnFavourite 函数中写什么来改变 UIBarButtonItem 图标?
  • @satheeshwaran 我想将图标更改为另一个图像,而不仅仅是悬停,所以在这种情况下我不能使用 .Highlighted 状态?
  • Apple doc for Highlighted state - "控件的高亮状态。在跟踪过程中触摸进入和退出以及有触摸事件时,控件进入此状态。您可以检索和设置此值通过 highlight 属性。控件的高亮状态。在跟踪过程中,当触摸进入和退出以及发生触摸事件时,控件进入此状态。您可以通过 highlight 属性检索和设置此值。"

标签: ios swift image button uibarbuttonitem


【解决方案1】:

我确信有一种更优雅的方法可以做到这一点,但这对我有用:

在 viewDidLoad() 中:

    let share_button = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
    let fave_button = UIBarButtonItem(image: UIImage(named: "icon-star"), style: .plain, target: self, action: #selector(favorite))
    let faved_button = UIBarButtonItem(image: UIImage(named: "icon-star-filled"), style: .plain, target: self, action: #selector(unfavorite))
    if YOUROBJECT.faved{
        navigationItem.rightBarButtonItems = [share_button, faved_button]
    }
    else{
        navigationItem.rightBarButtonItems = [share_button, fave_button]
    }

然后创建两个#selector函数:

@objc func favorite(){
    let share_button = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
    let faved_button = UIBarButtonItem(image: UIImage(named: "icon-star-filled"), style: .plain, target: self, action: #selector(unfavorite))
    navigationItem.rightBarButtonItems = [share_button, faved_button]
    YOUROBJECT.faved = true
}
@objc func unfavorite(){
    let share_button = UIBarButtonItem(barButtonSystemItem: .action, target: self, action: #selector(shareTapped))
    let fave_button = UIBarButtonItem(image: UIImage(named: "icon-star"), style: .plain, target: self, action: #selector(favorite))
    navigationItem.rightBarButtonItems = [share_button, fave_button]
    YOUROBJECT.faved = false
}

【讨论】:

    【解决方案2】:

    创建方法,它将根据self.isFavourited 的状态更新您的按钮

    var isFavourited = false;//declare this above the viewDidload()
    
    func updateRighBarButton(isFavourite : Bool){
        let btnFavourite = UIButton(frame: CGRectMake(0,0,30,30))
        btnFavourite.addTarget(self, action: "btnFavouriteDidTap", forControlEvents: .TouchUpInside)
    
    
        if isFavourite {
             btnFavourite.setImage(UIImage(named: "star_filled"), forState: .Normal)
        }else{
            btnFavourite.setImage(UIImage(named: "star"), forState: .Normal)
        }
        let rightButton = UIBarButtonItem(customView: btnFavourite)
        self.navigationItem.setRightBarButtonItems([rightButton], animated: true)
    }
    
    
    
    func btnFavouriteDidTap()
    {
        //do your stuff
        self.isFavourited = !self.isFavourited;
        if self.isFavourited {
            self.favourite();
        }else{
            self.unfavourite();
        }
        self.updateRighBarButton(self.isFavourited);
    }
    
    
    func favourite()
    {
        //do your favourite stuff/logic
    }
    
    func unfavourite(){
        //do your unfavourite logic
    }
    

    在viewDidload方法中,第一次调用,即

    self.updateRighBarButton(self.isFavourited);//first time self.isFavourited will be false
    

    【讨论】:

    • 那如果我想取消收藏,我应该在哪里写呢?
    • @jefferyleo 根据您的要求检查已编辑的答案。
    • 谢谢!你已经回答了我的问题并满足了我的需求......非常感谢老兄......感谢
    • 这确实有效。其他方法都对我不起作用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多