2016-03-22 3 views
1

У меня есть UIBarButton в моей панели навигации, я установить изображение (silhouette.png) к нему из раскадровки, и я могу изменить оттенок этого изображения в (цвет) по желанию:Невозможно изменить UIBarButton tintColor

if let num2 = Int(s, radix: 16) { //s="00ff00" 
     flamingoBtn.tintColor = UIColor(netHex:num2) //this btn is an IBoutlet 
    } 

Однако, в какой-то момент изменить исходное изображение для другого изображения (icon.png), программно, поэтому мне не нужно, чтобы изменить оттенок в этом случае, до сих пор так хорошо:

if let url = NSURL(string: "http://www.123di.com/CanonSGLens_132.png") { 
      if let data = NSData(contentsOfURL: url) { 
       var newImgThumb : UIImage=UIImage(data: data)! 

       var iconBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35)) 
       iconBtn.setImage(newImgThumb, forState: UIControlState.Normal) 
       iconBtn.addTarget(self, action: "goToSettings:", forControlEvents: UIControlEvents.TouchUpInside) 
       var item = UIBarButtonItem(customView: iconBtn) 
       self.navigationItem.leftBarButtonItem = item 
       print("CUSTOM ICON: DOWNLOADED") 
      } 
     } 

проблема приходит, когда я переключаюсь на изображение значка на исходный силуэт.png, потому что я не могу изменить оттенок любой lo nger, она всегда остается синим silhoute (цвет по умолчанию), а не зеленый, красный и т.д.:

 var newImgThumb : UIImage=UIImage(named: "happyface.png")! 
     var replyBtn = UIButton(frame: CGRect(x: 0, y: 0, width: 35, height: 35)) 
     replyBtn.setImage(newImgThumb, forState: UIControlState.Normal) 
     replyBtn.addTarget(self, action: "goToSettings:", forControlEvents: UIControlEvents.TouchUpInside) 
     replyBtn.tintColor = UIColor.greenColor() 
     var item = UIBarButtonItem(customView: replyBtn) 
     item.tintColor = UIColor.greenColor()//UIColor(netHex:num2) 
     self.navigationItem.leftBarButtonItem = item 

Что я делаю не так, почему изменения оттеночные igonred потом ?? Если вам нужна дополнительная информация, дайте мне знать.

+0

Вы пытались сохранить ссылку на кнопку и после того, как она будет установлена ​​и представлена, изменив цвет оттенка в этот момент? – sschale

ответ

1

Если Google, как установить собственное изображение для вашей кнопки бара, в значительной степени все расскажут вам создать UIButton, а затем создать UIBarButtonItem из UIButton как customView:. В этом случае вы делаете правильные вещи здесь.

Однако, если вы создали UIBarButtonItem через cutomView:, вы не сможете изменить tintColor. И это следующий, как установить собственное изображение, а также изменения tintColor

let item = UIBarButtonItem.init(image: UIImage(named: "happyface.png")!, 
       style: .Plain, 
       target: self, 
       action: Selector("goToSettings:")) 
    item.tintColor = UIColor.greenColor() 
    self.navigationItem.leftBarButtonItem = item 

В зависимости где вы звоните код выше, вы, возможно, необходимо поместить его в эту структуру, чтобы заставить ее работать в потоке пользовательского интерфейса и сделать изменение видимо:

dispatch_async(dispatch_get_main_queue()) { 
//code here 
} 
+0

Бро, ты прибил его. Благодаря!! Мне просто пришлось обернуть этот код внутри dispatch_async (dispatch_get_main_queue()) {// здесь}, чтобы код выполнялся в потоке пользовательского интерфейса, и изменения были видны. Просто добавьте эту дополнительную строку кода, и я дам вам этот зеленый галочку. @ Yuchen-Zhong – Josh

+0

Эй, @ Josh, рад узнать, что это помогает :) Я лично не хочу добавлять диспетчерскую очередь в ответ здесь, так как он не связан с вопросом, который вы задавали: ** почему я не могу изменить цвет оттенка **. Добавление этого вопроса сделает вопрос/ответ более сложным и менее полезным для других людей, имеющих такую ​​же проблему. И вы не должны добавлять это, если знаете, что находитесь в потоке пользовательского интерфейса и только отправляете, когда находитесь в фоновом потоке. В целом, dispatch_async не дешево. –

+0

Это имеет смысл, я добавил его как дополнительную вещь, так как некоторые люди не знают об этом и начинают думать, что код не работает. (недавно я включил меня) @ Yuchen-Zhong – Josh

 Смежные вопросы

  • Нет связанных вопросов^_^