1

ナビゲーション バーに UIBarButton があり、ストーリーボードから画像 (silhouette.png) を設定し、その画像の色合い (色) を自由に変更できます。

    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 に切り替えると、色合いを変更できないため、緑、赤などではなく、常に青のシルエット (デフォルトの色) のままです。

        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

私は何を間違っていますか、なぜ色合いの変更は後で無視されるのですか?? 追加の詳細が必要な場合はお知らせください。

4

3 に答える 3

4

バー ボタンのカスタム イメージを設定する方法を Google で検索すると、ほとんどの人が を作成してから をとしてUIButton作成すると言うでしょう。その場合、ここで正しいことをしています。UIBarButtonItemUIButtoncustomView:

ただし、UIBarButtonItemviaを作成する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

上記のコードを呼び出す場所によっては、UI スレッドで実行して変更を可視化するために、この構造内に配置する必要がある場合があります。

dispatch_async(dispatch_get_main_queue()) {  
//code here
}
于 2016-03-22T00:21:29.600 に答える