2015-12-31 2 views
1

В методе viewDidload я объявил кнопку и установить RightBarButton ...Изменить UIBarButtonItem Icon после прессованный IOS быстрое

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 
} 
+0

у вас есть обратный вызов 'btnFavourite' настроить, вы пробовали изменения изображения в там? – luk2302

+0

код, который у вас есть, должен работать нормально. Фактически выделенное состояние меняет изображение, когда вы прикасаетесь один раз и снимаете свою руку, например, действие hove. Чего вы хотите достичь, явным приятелем. – satheeshwaran

+0

@ luk2302 что написать в функции btnFavourite там, чтобы изменить значок UIBarButtonItem? – jefferyleo

ответ

5

Создать метод, который будет обновлять вам кнопки на основании состояния 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 
+0

то что, если я хочу, чтобы не понравилось, где я должен писать материал для этого? – jefferyleo

+0

@jefferyleo проверить отредактированный ответ в соответствии с вашими требованиями. –

+0

Спасибо! У вас есть ответ на мой вопрос и выполнить мои потребности ... спасибо, много чувак ... ценят – jefferyleo

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 
}