So fügen Sie UIBarButtonItem zu NavigationBar hinzu, während Sie UIPageViewController verwenden

10

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.

%Vor%

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.

%Vor%

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.

  • Einstellung der Schaltfläche in viewDidLoad anstatt viewDidAppear
    • Dies funktioniert nicht, da die Methode 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.
  • Festlegen der Schaltfläche in den Delegate-Methoden von UIPageViewController
    • Dies ist problematisch, wenn der Benutzer die Seiten durchblättert, so dass die Schaltfläche nicht geändert werden kann oder nicht angezeigt wird.

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

%Vor%     
Ben 12.02.2014, 16:51
quelle

3 Antworten

1

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.

    
mrosales 12.02.2014, 19:10
quelle
1

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!

    
Graham Perks 21.11.2014 17:40
quelle
0

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 behandeln

Allerdings würde ich Ihnen nicht raten, dies zu tun, da es das ganze Konzept von UIPageViewController bricht.

Ich hoffe, das wäre hilfreich.

    
Hitesh Savaliya 12.02.2014 19:04
quelle