Ich habe ein BarButtonItem, das ich jedem ViewController in meiner App hinzufügen möchte. Wie kann ich dies tun, ohne den Button-Erstellungscode und die Aktionsfunktion in jeden ViewController kopieren zu müssen? Ich würde die Wiederverwendbarkeit bevorzugen, anstatt den gleichen Code in jedem ViewController zu haben.Swift 3 - Hinzufügen von BarButtonItem zur Navigationsleiste auf jedem ViewController ohne Code zu wiederholen
Button-Code:
// Settings button
let btn = UIButton(type: .custom)
btn.setImage(UIImage(named: "icon-settings"), for: .normal)
btn.frame = CGRect(x: 0, y: 0, width: 30, height: 30)
btn.addTarget(self, action: #selector(showSettings(sender:)), for: .touchUpInside)
let settingsBtn = UIBarButtonItem(customView: btn)
self.navigationItem.setRightBarButton(settingsBtn, animated: false)
Die Aktion:
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let vc = storyboard.instantiateViewController(withIdentifier: "SettingsVC") as! SettingsViewController
self.navigationController?.show(vc, sender: self)
Ich habe versucht, diesen Code in einer separaten Utility-Klasse hinzufügen, aber Sie können den Übergang von nicht durchführen, da es Es gibt keine Möglichkeit, über die Action-Funktion auf den übergeordnete ViewController der Schaltfläche zuzugreifen, wenn dies in der Utility-Klasse deklariert ist. Ich habe auch versucht, UINavigationController abzuleiten und diese Unterklasse dem NavigationController in meinem Storyboard zuzuordnen, aber es hat nicht funktioniert.
Sie müssen Unterklasse 'UIViewController' und haben Sie jede Ihrer View-Controller Unterklasse * das * Unterklasse – Paulw11