2016-03-22 1 views
1

を変更することはできません、と私は意志でその画像の色合い(色)を変更することができますは、私はストーリーボードからそれまでの画像(silhouette.png)を設定し、私は私のナビゲーションバーでUIBarButtonを持って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") 
      } 
     } 

問題アイコンの画像を元のsilhouette.pngに切り替えると、色合いを変更できないので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

あなたがバーボタンのカスタムイメージを設定する方法をグーグル場合は、ほとんど誰もがあなたがUIButtonを作成し、customView:としてUIButtonからUIBarButtonItemを作成教えてくれます。あなたはここで正しいことをしています。

ただし、cutomView:UIBarButtonItemを作成すると、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 

を変更する方法を、あなたはそれがUIスレッドで実行するために、この構造体の内部にそれを置く必要があるとするかもしれないです表示の変更:

+0

Bro、あなたはそれを釘付けにした。ありがとう!! dispatch_async(dispatch_get_main_queue()){// code here}の中にそのコードをラップして、コードがUIスレッドで実行され、変更が表示されるようにしなければなりませんでした。コードの余分な行を追加するだけで、私はあなたにその緑のダニを与えます。 @ Yuchen-Zhong – Josh

+0

ちょっと@Josh、それが助けてくれることを嬉しく思っています:)あなたが求めていた質問と無関係なので、私は個人的に答えの中にキューのディスパッチを追加したくありません:**なぜ私は変更できません色合い**。これを追加すると、同じ問題を抱えている他の人に質問/回答がより複雑になり、役に立たなくなります。また、UIスレッドを使用していて、バックグラウンドスレッドのときだけディスパッチすることがわかっている場合は、これを追加しないでください。全体として、dispatch_asyncは安価ではありません。 –

+0

これは意味があります。私はオプションのものとして追加しました。何人かはそれについて知りませんし、コードが機能しないと考え始めるからです。 (私は、まもなく含まれています)@ Yuchen-Zhong – Josh

関連する問題