Bitte verzeih mir, es gibt bereits eine Menge Fragen darüber, wie man ein UIBarButtonItem programmatisch zu einer NavigationBar hinzufügen kann, aber ich kann einfach nicht scheinen, dass irgendeine der Lösungen in meiner Situation funktioniert.
Hier ist das Layout einer einfachen Test-App, mit der ich gearbeitet habe, um den UIPageViewController zu lernen.
Ich habe den Seitenansicht-Controller, der gut mit drei einzigartigen viewControllern funktioniert. Ich möchte jetzt die eindeutige rightBarButtonItems
für jeden View-Controller festlegen. Ich kann einfach ein gemeinsames barButtonItem
in DetailViewController
setzen, indem ich einfach das tue.
Da ich für jede der drei Seiten in pageViewController
eine eindeutige Schaltfläche brauche, kann ich die Schaltfläche in detailViewController
nicht setzen. Ich habe den obigen Code in viewDidAppear
der drei Controller ausprobiert, aber die Schaltflächen werden nicht angezeigt. Ich habe auch versucht, den Button auf die gleiche Weise zu erstellen und es dann ohne Glück zu setzen.
Ich weiß, dass ich in der Nähe bin. Ich bin mir nicht sicher, wie ich spezifizieren soll. Ich muss eine Schaltfläche zur Navigationsleiste des NavigationControllers hinzufügen, auf dem der detailViewController ausgeführt wird, in den meine contentViewControllers eingebettet sind. Jede Hilfe wäre BESONDERS groß SNIPPETS.
Als Randnotiz habe ich ein paar andere Methoden ausprobiert, die problematisch geworden sind.
viewDidLoad
anstatt viewDidAppear
viewDidLoad
nicht jedes Mal aufgerufen wird, wenn Sie von einer Seite zur nächsten streichen. Die Methode viewDidAppear
ist jedoch so, dass ich versuche, die Schaltfläche dort zu setzen. Es ist möglich, viewWillAppear
wird jedes Mal aufgerufen, aber ich habe nicht überprüft. LÖSUNG
Es stellte sich heraus, dass ich nah dran war ... Anstatt die Schaltfläche in den UIPageViewController-Methoden zu erstellen, musste ich einfach eine navigationItem
-Eigenschaft in jedem meiner drei View-Controller erstellen. Wenn die Controller in den Delegate-Methoden instanziiert werden, setze ich einfach die Eigenschaft navigationItem auf die von detailViewController. Auf diese Weise konnte ich in meinen viewDidApper
Methoden die Schaltfläche erstellen. Dann bei viewWillDisappear
setze ich den Knopf auf nil
. Sie können auch die Schaltfläche unter viewdidLoad
von DetailViewController
erstellen und den Text und die Aktion in viewDidAppear
der einzelnen viewControllers ändern. Hier ist ein Beispiel.
In den Delegate-Methoden
%Vor%Ich rufe eine Hilfsmethode auf, die auf dem Index von viewController basiert. Die Hilfsmethode instanziiert die View-Controller beim Aufruf. Nach der Instanziierung habe ich einige Eigenschaften einschließlich der Eigenschaft navigationItem festgelegt.
%Vor% Dann mache ich das in der viewDidAppear
des viewControllers einfach
Wenn Sie die Schaltfläche jedes Mal ändern müssen, wenn Sie die betrachtete Seite ändern, muss dies in einer der Delegate-Methoden geschehen, die Sie ausprobiert haben. Ich schlage jedoch vor, dass Sie anstatt einen neuen Knopf zu erstellen und ihn auf den Navigationspunkt zu setzen, einfach den Titel ändern.
Sie können die Schaltfläche im Interface Builder erstellen und mit einer Eigenschaft in Ihrem DetailViewController
verknüpfen und dann setTitle:forState
mit UIControlStateNormal
auf der Schaltfläche jedes Mal aufrufen, wenn Sie eine neue Seite aufrufen.
Wenn Sie die Schaltfläche benötigen, um für jede Seite etwas anderes zu tun, würde ich empfehlen, die aktuelle Seite in der Aktionsmethode buttons zu überprüfen, anstatt jedes Mal eine neue zu deklarieren.
Sie können das korrekte Navigationselement zum Einstellen von Tasten / Titeln finden, indem Sie den Seiten-Controller in einem seiner Seiten-View-Controller suchen und dann dessen Navigationselement erhalten. z.B.
%Vor%Es ist wirklich ärgerlich, dass self.navigationItem nicht funktioniert!
Einer meiner Kollegen hatte das gleiche Problem mit dem Seitenaufruf-Controller.
Soweit ich weiß, können Sie UIBarButtonItem nicht zur Navigationsleiste der Mitgliederansichts-Controller in UIPageViewController hinzufügen. Grund dafür ist, dass 'navigationController' für UIPageViewController auf Null gesetzt ist. Bestätigen Sie den Wert von [UIPageViewController navigationController].
Sie können jedoch eine Sache tun, um dieses Problem zu lösen. Bitte laden Sie das Beispiel PhotoScroller herunter.
Und folgende Änderungen in AppDelegate.m
%Vor%Und folgende Änderungen in PhotoViewController.m
%Vor%Um einen Absturz zu vermeiden, müssen Sie die UIPageViewControllerDataSource-Delegatmethoden in AppDelegate.m
korrekt behandelnAllerdings würde ich Ihnen nicht raten, dies zu tun, da es das ganze Konzept von UIPageViewController bricht.
Ich hoffe, das wäre hilfreich.
Tags und Links ios uinavigationcontroller uinavigationbar uibarbuttonitem uipageviewcontroller