2016-03-22 8 views
2

Ich bin neu in der iOS-Entwicklung und das kann eine einfache Frage sein. Meine Anwendung wird viele View-Controller haben, die ähnliche Eigenschaften haben. Ich habe eine Basisansicht-Controller-Klasse erstellt, welche Unterklassen UIViewController. Alle anderen View-Controller bilden eine Unterklasse der Basis-View-Controller. Die Eigenschaften, die ich in der Basisansicht-Controller-Klasse festlege, werden jedoch nicht übernommen. Zum Beispiel sollten die Schaltflächen der Navigationsleiste alle die Farbe Grün haben, aber die Standardfarbe Blau, wenn ich die App erstelle.Kann nicht Eigenschaften von Basis UIViewController Klasse

Hier ist die Basis-View-Controller-Klasse:

class BaseViewController: UIViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.navigationItem.leftBarButtonItem?.tintColor = UIColor.greenColor() 
    self.navigationItem.rightBarButtonItem?.tintColor = UIColor.greenColor() 
} 

Dies ist der Code für andere Ansicht-Controller, der die Basis-View-Controller über eine Unterklasse:

class AboutViewController: BaseViewController { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.title = NSLocalizedString("About", comment: "About page title") 
} 

habe ich das Web durchsucht und SO ähnliche Fragen, konnte aber keine Antwort finden. Ich sehe nichts grundsätzlich falsch mit meinem Code. Ich verwende Xcode 7.2.1 und teste auf iOS 8+. Auch getestet in Xcode 7.2.3 Beta, hatte aber ähnliche Ergebnisse.

+0

Ich habe gerade versucht, ein neues Projekt zu erstellen und konnte das Problem nicht reproduzieren. Sie können sich selbst davon überzeugen, indem Sie ein neues Projekt erstellen und 'viewDidLoad' überschreiben, genau wie Sie es beschrieben haben. Dies bedeutet, dass das Problem irgendwo anders in Ihrer Codebasis liegt. –

+0

@RudolfAdamkovic Vielen Dank für Ihre Eingabe. Ich habe gerade ein neues Master/Detail-Projekt erstellt. Der einzige Zusatz, den ich gemacht habe, war das Erstellen einer neuen Basis-Tableview-Controller-Klasse, die die Unterklassen UITableViewController bildet. Ich habe die viewDidLoad-Methode überschrieben, um das linke und das rechte barButtonItems auf eine bestimmte Farbe zu setzen. Ich habe die MasterViewController-Klasse von diesem Basisansicht-Controller erben lassen und die Farben wurden noch nicht geerbt. Ich denke, dass ich hier etwas verpasse, aber immer noch nachschaue. – ussd84

Antwort

1

Von dem, was ich sehe, ist dies kein Vererbungsproblem. Wenn Sie einen Breakpoint in viewDidLoad von BaseViewController setzen, führt es tatsächlich diesen Code aus. Ich denke, dein Problem ist, wie man die Farbtonfarbe ändert. Das Anpassen der Navigationsleiste in iOS ist so schmerzhaft, dass ich mich normalerweise vom Navigations-Controller entferne und am Ende nur meine eigene obere Leiste erzeuge, die ich vollständig anpassen kann.

Wenn Sie versuchen, mit dem der Farbton der beiden linken und rechten Leistenelemente für die gesamte App setzen diesen Code in Ihre AppDelegate Datei innerhalb der application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) Funktion zu ändern:

UINavigationBar.appearance().tintColor = UIColor.greenColor() 

Hier ist ein Blog-Post Ich habe, dass zeigt, wie die anderen Farben von UINavigationBar geändert werden: Navigation Bar Colors.

+0

Danke das kann der Weg sein, den ich nehmen kann. Ich glaube auch nicht, dass es ein Vererbungsproblem ist, aber ich frage mich, warum es nicht funktioniert. Ich habe ein weiteres sauberes Projekt gestartet, um das auszuprobieren, aber ich hatte das gleiche Problem. Siehe meinen obigen Kommentar – ussd84

Verwandte Themen