Bitte vergib mir, es gibt bereits eine Menge Fragen darüber, wie ein UIBarButtonItem zu einer NavigationBar programmgesteuert hinzugefügt wird, aber ich kann einfach keine der Lösungen in meinem funktionieren Lage.Hinzufügen von UIBarButtonItem zu NavigationBar während der Verwendung von UIPageViewController
Hier ist das Layout einer einfachen Test-App, mit der ich gearbeitet habe, um den UIPageViewController zu lernen.
Ich habe die Seite View-Controller gut mit drei einzigartigen Viewcontrollers arbeiten. Ich möchte nun einmalig rightBarButtonItems
für jeden der View-Controller setzen. Ich kann einfach einen gemeinsamen barButtonItem
in DetailViewController
setzen, indem Sie einfach dies tun.
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"Whatever"
style:UIBarButtonItemStylePlain
target:self
action:@selector(doSomething)];
self.navigationItem.rightBarButtonItem = newButton;
Da ich eine einzigartige Schaltfläche für jede der drei Seiten in den pageViewController
brauchen bin ich nicht in der Lage auf die Schaltfläche im detailViewController
einzustellen. Ich habe den Code oben in viewDidAppear
der drei Controller versucht, aber die Tasten werden nicht angezeigt. Ich habe auch versucht, den Button auf die gleiche Weise zu erstellen und es dann ohne Glück zu setzen. Jede Hilfe
DetailViewController *vc = [[DetailViewController alloc] init];
vc.navigationItem.rightBarButtonItem = newButton;
Ich weiß, ich bin hier in der Nähe, ich bin nur nicht sicher, wie ich eine Schaltfläche, um die Navigationsleiste des Navigation muß angeben, hinzuzufügen, die die detailViewController ausgeführt, dass mein contentViewControllers in eingebettet ist. Wäre besonders BESONDERS SNIPPETS.
Als eine Randnotiz habe ich ein paar andere Methoden versucht, die problematisch geworden sind.
- Einstellung der Taste in
viewDidLoad
stattviewDidAppear
- Das wird nicht funktionieren, weil die
viewDidLoad
Methode jedes Mal nicht genannt wird man von einer Seite zur nächsten streichen. DieviewDidAppear
Methode ist jedoch so, ich versuche, den Knopf dort zu setzen. Es ist möglich,viewWillAppear
wird jedes Mal aufgerufen, aber ich habe nicht überprüft.
- Das wird nicht funktionieren, weil die
- die Schaltfläche in den Delegatmethoden UIPageViewController Einstellung
- Dies ist problematisch, wenn der Benutzer durch die Seiten blättert, um schnell die Taste nicht ändern oder ausbleiben.
SOLUTION
Es stellt sich heraus, dass ich war in der Nähe ... Anstatt die Schaltfläche in den UIPageViewController Methoden zu schaffen habe ich einfach eine navigationItem
Eigenschaft in jedem meiner drei View-Controller benötigt 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 unter viewWillDisappear
setze ich den Knopf auf nil
. Sie können auch einfach die Schaltfläche unter viewdidLoad
der DetailViewController
erstellen und den Text und die Aktion in viewDidAppear
der einzelnen viewControllers ändern. Hier ist ein Beispiel.
In den Delegatmethoden
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
Ich nenne ein Verfahren Helfer auf dem Index des Viewcontroller basiert. Die Hilfsmethode instanziiert die View-Controller beim Aufruf. Nach der Instanziierung habe ich einige Eigenschaften einschließlich der Eigenschaft navigationItem festgelegt.
-(FirstController *)controllerAtIndex:(NSUInteger)index
{
FirstController *fvc = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstPageController"];
fvc.imageFile = self.pageImages[index];
fvc.titleText = self.pageTitles[index];
fvc.pageIndex = index;
fvc.navItem = self.navigationItem;
return fvc;
}
Dann in den viewDidAppear
des Viewcontroller ich gerade dieser
-(void)viewDidAppear:(BOOL)animated
{
UIBarButtonItem *newButton = [[UIBarButtonItem alloc]
initWithTitle:@"Whatever" style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
navItem.rightBarButtonItem = newButton;
}
Was ist die Eigenschaft navItem auf Ihren ViewControllern? –
Tolle Lösung :-) – Fabrizio