webentwicklung-frage-antwort-db.com.de

Wie kann man das Bild für die Bar-Schaltfläche mit der Schnelligkeit einstellen?

Ich versuche, ein Bild für die Schaltflächenschaltfläche festzulegen, für das ich ein Bild wie:

enter image description here

mit einer Auflösung von 30 * 30, aber während ich dieses Bild der Bar-Schaltfläche zuweisen, sieht es so aus:

enter image description here

Ich habe Bild auf diese Weise zugewiesen:

enter image description here

und wenn ich auf diese Weise versuche, ein IBOutlet für die Schaltfläche zu erstellen und Image programmatisch als diese Frage und den entsprechenden Code festzulegen, lautet:

 // Outlet for bar button
 @IBOutlet weak var fbButton: UIBarButtonItem!

// Set Image for bar button
var backImg: UIImage = UIImage(named: "fb.png")!
fbButton.setBackgroundImage(backImg, forState: .Normal, barMetrics: .Default)

aber damit ist nichts passiert,

Kann mir jemand sagen, was ich falsch mache?

oder was ist der Teig Weg, dies zu tun?

42
Dharmesh Kheni

Das ist mir programmatisch mit diesem Code gelungen:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //create a new button
        let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton
        //set image for button
        button.setImage(UIImage(named: "fb.png"), forState: UIControlState.Normal)
        //add function for button
        button.addTarget(self, action: "fbButtonPressed", forControlEvents: UIControlEvents.TouchUpInside)
        //set frame
        button.frame = CGRectMake(0, 0, 53, 31)

        let barButton = UIBarButtonItem(customView: button)
        //assign button to navigationbar
        self.navigationItem.rightBarButtonItem = barButton
    }

    //This method will call when you press button.
    func fbButtonPressed() {

        println("Share to fb")
    }
}

Und das Ergebnis wird sein:

 enter image description here

Auf die gleiche Weise können Sie auch die linke Seite so einstellen:

self.navigationItem.leftBarButtonItem = barButton

Und das Ergebnis wird sein:

 enter image description here

Wenn Sie dieselbe Transaktion wie der Navigations-Controller haben möchten, wenn Sie mit der Standard-Zurück-Schaltfläche zurückgehen, können Sie dies mit der benutzerdefinierten Zurück-Schaltfläche mit diesem Code erreichen:

func backButtonPressed(sender:UIButton) {
    navigationController?.popViewControllerAnimated(true)
}

Für Swift 3.0:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //create a new button
        let button = UIButton.init(type: .custom)
        //set image for button
        button.setImage(UIImage(named: "fb.png"), for: UIControlState.normal)
        //add function for button
        button.addTarget(self, action: #selector(ViewController.fbButtonPressed), for: UIControlEvents.touchUpInside)
        //set frame
        button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)

        let barButton = UIBarButtonItem(customView: button)
        //assign button to navigationbar
        self.navigationItem.rightBarButtonItem = barButton
    }

    //This method will call when you press button.
    func fbButtonPressed() {

        print("Share to fb")
    }
}

Für Swift 4.0:

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        //create a new button
        let button = UIButton(type: .custom)
        //set image for button
        button.setImage(UIImage(named: "fb.png"), for: .normal)
        //add function for button
        button.addTarget(self, action: #selector(fbButtonPressed), for: .touchUpInside)
        //set frame
        button.frame = CGRect(x: 0, y: 0, width: 53, height: 51)

        let barButton = UIBarButtonItem(customView: button)
        //assign button to navigationbar
        self.navigationItem.rightBarButtonItem = barButton
    }

    //This method will call when you press button.
    @objc func fbButtonPressed() {

        print("Share to fb")
    }
}
67
Dharmesh

Eine einfache Lösung kann die folgende sein

barButtonItem.image = UIImage(named: "image")

gehen Sie dann zu Assets.xcassets, wählen Sie das Bild aus, gehen Sie zum Attributinspektor und wählen Sie "Originalbild" in Reder als Option.

25

Ähnlich wie die akzeptierte Lösung, aber Sie können die ersetzen 

let button: UIButton = UIButton.buttonWithType(UIButtonType.Custom) as! UIButton

mit

let button = UIButton()

Hier ist die vollständige Lösung, genießen Sie: (es ist nur ein bisschen sauberer als die akzeptierte Lösung)

let button = UIButton()
button.frame = CGRectMake(0, 0, 51, 31) //won't work if you don't set frame
button.setImage(UIImage(named: "fb"), forState: .Normal)
button.addTarget(self, action: Selector("fbButtonPressed"), forControlEvents: .TouchUpInside)

let barButton = UIBarButtonItem()
barButton.customView = button
self.navigationItem.rightBarButtonItem = barButton
16
jungledev

Hier ist eine einfache extension auf UIBarButtonItem:

extension UIBarButtonItem {
    class func itemWith(colorfulImage: UIImage?, target: AnyObject, action: Selector) -> UIBarButtonItem {
        let button = UIButton(type: .custom)
        button.setImage(colorfulImage, for: .normal)
        button.frame = CGRect(x: 0.0, y: 0.0, width: 44.0, height: 44.0)
        button.addTarget(target, action: action, for: .touchUpInside)

        let barButtonItem = UIBarButtonItem(customView: button)
        return barButtonItem
    }
}
14
Jovan Stankovic

Ich verwende den neuesten Swift (2.1) und die Antwort (Dharmesh Kheni und Jungledev) funktioniert für mich nicht. Die Bildfarbe war deaktiviert (bei der Einstellung in IB war sie blau und bei der direkten Einstellung in UIButton war sie schwarz). Es stellt sich heraus, dass ich das gleiche Barelement mit dem folgenden Code erstellen könnte:

let barButton = UIBarButtonItem(image: UIImage(named: "menu"), landscapeImagePhone: nil, style: .Done, target: self, action: #selector(revealBackClicked))
self.navigationItem.leftBarButtonItem = barButton

Dazu sind nur zwei Codezeilen erforderlich

Swift 3.0

let closeButtonImage = UIImage(named: "ic_close_white")
        navigationItem.rightBarButtonItem = UIBarButtonItem(image: closeButtonImage, style: .plain, target: self, action:  #selector(ResetPasswordViewController.barButtonDidTap(_:)))

func barButtonDidTap(_ sender: UIBarButtonItem) 
{

}
6
Sreekumar .K

Ihr Problem liegt in der Art und Weise, wie das Symbol erstellt wurde - es entspricht nicht den Apple-Symbolspezifikationen für die Registerkartensymbole:

To design a custom bar icon, follow these guidelines:

Use pure white with appropriate alpha transparency.
Don’t include a drop shadow.
Use antialiasing.

Aus den Richtlinien: 

https://developer.Apple.com/library/ios/documentation/UserExperience/Conceptual/MobileHIG/BarIcons.html#//Apple_ref/doc/uid/TP40006556-CH21

Etwas, das möglich wäre, sieht so aus. Solche Symbole finden Sie auf den meisten freien Symbolseiten.

enter image description here

5
aparna

Sie können diesen Code für mehrere Schaltflächen mit benutzerdefiniertem Bild verwenden:

self.navigationItem.leftBarButtonItem = nil

let button = UIButton(type: .custom)
button.setImage(UIImage (named: "ChatTab"), for: .normal)
button.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0)
//button.addTarget(target, action: nil, for: .touchUpInside)
let barButtonItem = UIBarButtonItem(customView: button)

let button2 = UIButton(type: .custom)
button2.setImage(UIImage (named: "ActivityTab"), for: .normal)
button2.frame = CGRect(x: 0.0, y: 0.0, width: 35.0, height: 35.0)
//button.addTarget(target, action: nil, for: .touchUpInside)

let barButtonItem2 = UIBarButtonItem(customView: button2)
self.navigationItem.rightBarButtonItems = [barButtonItem, barButtonItem2]

Ergebnis wird folgendes sein:

 enter image description here

4

Schnell 4. 

@IBOutlet weak var settingBarBtn: UIBarButtonItem! {
    didSet {
        let imageSetting = UIImageView(image: UIImage(named: "settings"))
        imageSetting.image = imageSetting.image!.withRenderingMode(.alwaysOriginal)
        imageSetting.tintColor = UIColor.clear
        settingBarBtn.image = imageSetting.image
    }
}

BarbuttonItem wie folgt initialisieren:

let pauseButton = UIBarButtonItem(image: UIImage(named: "big"),
                                  style: .plain,
                                  target: self,
                                  action: #selector(PlaybackViewController.pause))
0
Eric Ford

Wenn Ihr UIBarButtonItem bereits wie in einem Storyboard zugewiesen ist. (printBtn)

    let btn = UIButton(frame: CGRect(x: 0, y: 0, width: 30, height: 30))
    btn.setImage(UIImage(named: Constants.ImageName.print)?.withRenderingMode(.alwaysTemplate), for: .normal)
    btn.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(handlePrintPress(tapGesture:))))
    printBtn.customView = btn
0
Craig