Benutzerdefiniertes Schaltflächenbild ohne Einstellung des Schaltflächenrahmens:
Sie können init(image: UIImage?, style: UIBarButtonItemStyle, target: Any?, action: Selector?)
ein neues Element mit dem angegebenen Bild und anderen Eigenschaften initialisieren.
let button1 = UIBarButtonItem(image: UIImage(named: "imagename"), style: .plain, target: self, action: Selector("action")) // action:#selector(Class.MethodName) for swift 3
self.navigationItem.rightBarButtonItem = button1
Überprüfen Sie dieses Apple Doc. Referenz
UIBarButtonItem mit benutzerdefiniertem Schaltflächenbild unter Verwendung des Schaltflächenrahmens
ZUM Swift 3.0
let btn1 = UIButton(type: .custom)
btn1.setImage(UIImage(named: "imagename"), for: .normal)
btn1.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn1.addTarget(self, action: #selector(Class.Methodname), for: .touchUpInside)
let item1 = UIBarButtonItem(customView: btn1)
let btn2 = UIButton(type: .custom)
btn2.setImage(UIImage(named: "imagename"), for: .normal)
btn2.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn2.addTarget(self, action: #selector(Class.MethodName), for: .touchUpInside)
let item2 = UIBarButtonItem(customView: btn2)
self.navigationItem.setRightBarButtonItems([item1,item2], animated: true)
FÜR Swift 2.0
und älter
let btnName = UIButton()
btnName.setImage(UIImage(named: "imagename"), forState: .Normal)
btnName.frame = CGRectMake(0, 0, 30, 30)
btnName.addTarget(self, action: Selector("action"), forControlEvents: .TouchUpInside)
//.... Set Right/Left Bar Button item
let rightBarButton = UIBarButtonItem()
rightBarButton.customView = btnName
self.navigationItem.rightBarButtonItem = rightBarButton
Oder verwenden Sie einfach init (customView :) wie
let rightBarButton = UIBarButtonItem(customView: btnName)
self.navigationItem.rightBarButtonItem = rightBarButton
Für System UIBarButtonItem
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: Selector("btnOpenCamera"))
self.navigationItem.rightBarButtonItem = camera
Für mehr als 1 Artikel verwenden Sie rightBarButtonItems
oder für die linke SeiteleftBarButtonItems
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
let item1 = UIBarButtonItem()
item1.customView = btn1
let btn2 = UIButton()
btn2.setImage(UIImage(named: "img2"), forState: .Normal)
btn2.frame = CGRectMake(0, 0, 30, 30)
btn2.addTarget(self, action: Selector("action2:"), forControlEvents: .TouchUpInside)
let item2 = UIBarButtonItem()
item2.customView = btn2
self.navigationItem.rightBarButtonItems = [item1,item2]
Verwenden von setLeftBarButtonItem
odersetRightBarButtonItem
let btn1 = UIButton()
btn1.setImage(UIImage(named: "img1"), forState: .Normal)
btn1.frame = CGRectMake(0, 0, 30, 30)
btn1.addTarget(self, action: Selector("action1:"), forControlEvents: .TouchUpInside)
self.navigationItem.setLeftBarButtonItem(UIBarButtonItem(customView: btn1), animated: true);
Für schnell> = 2.2 sollte Aktion sein #selector(Class.MethodName)
... für zbtnName.addTarget(self, action: #selector(Class.MethodName), forControlEvents: .TouchUpInside)
let camera = UIBarButtonItem(barButtonSystemItem: .Camera, target: self, action: #selector(Class.MethodName))
Mit
Swift 4
oder ist es viel einfacherSwift 4.2
ViewDidLoad
Definieren Sie in Ihrer Methode Ihre Schaltfläche und fügen Sie sie der Navigationsleiste hinzu.Dann müssen Sie die Funktion, die Sie im Aktionsparameter erwähnt haben, wie folgt definieren
Sie müssen das
@objc
Präfix hinzufügen, da es immer noch das Legacy-Material verwendet (Ziel C).quelle
Einfach
UIBarButtonItem
mit customView einrichtenBeispielsweise:
oder verwenden
setFunction
:quelle
Ich bin gerade auf diese Frage gestoßen und hier ist ein Update für Swift 3 und iOS 10:
Es ist definitiv viel schneller als das Erstellen des UIButton mit allen Eigenschaften und das anschließende Hinzufügen der benutzerdefinierten Ansicht zum UIBarButtonItem.
Und wenn Sie die Farbe des Bildes von Standardblau auf Weiß ändern möchten, können Sie jederzeit die Farbtonfarbe ändern:
PS Du solltest natürlich den Selektor etc. für deine App ändern :)
quelle
In Swift 3.0+
UIBarButtonItem
programmgesteuert wie folgt einrichten:quelle
Einstellen des LeftBarButton mit dem Originalbild.
quelle
Ich habe das gleiche Problem und habe Antworten in einem anderen Thema gelesen, dann löse ich einen anderen ähnlichen Weg. Ich weiß nicht, was effektiver ist. ähnliches Problem
quelle
Das ist eine verrückte Sache mit Apfel. Wenn Sie self.navigationItem.rightBarButtonItem.title sagen, wird null angezeigt, während auf der GUI Bearbeiten oder Speichern angezeigt wird. Fresher mag mich wird viel Zeit brauchen, um dieses Verhalten zu debuggen.
Es ist erforderlich, dass das Element beim ersten Laden Bearbeiten anzeigt und der Benutzer darauf tippt. Es ändert sich in Titel speichern. Um dies zu archivieren, habe ich wie folgt vorgegangen.
// Ansicht wurde geladen sagt Titel bearbeiten
// Tippen Sie auf Element bearbeiten wird in Titel speichern geändert
// Tippen Sie auf Speichern, um den Titel Titel bearbeiten anzuzeigen
quelle
iOS 11
Festlegen einer benutzerdefinierten Schaltfläche mithilfe einer Einschränkung:
quelle
quelle