请原谅我,关于如何以编程方式将UIBarButtonItem添加到NavigationBar已经有很多问题,但我似乎无法获得任何解决方案以在我的工作情况。如何在使用UIPageViewController时将UIBarButtonItem添加到NavigationBar
这是我一直在学习UIPageViewController的简单测试应用程序的布局。
我有三个独特的viewControllers工作很好的页面视图控制器。我现在想为每个视图控制器设置独特的rightBarButtonItems
。通过简单地做到这一点,我可以轻松地在DetailViewController
中设置一个共同的barButtonItem
。
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"Whatever"
style:UIBarButtonItemStylePlain
target:self
action:@selector(doSomething)];
self.navigationItem.rightBarButtonItem = newButton;
考虑到我需要为每个在pageViewController
三页的独特的按钮,我不能够设置在detailViewController
按钮。我已经尝试了三个控制器的viewDidAppear
中的上述代码,但不会出现按钮。我也尝试以相同的方式创建按钮,然后像这样设置它,但没有运气。
DetailViewController *vc = [[DetailViewController alloc] init];
vc.navigationItem.rightBarButtonItem = newButton;
我知道我靠近这里,我只是不知道如何指定我需要一个按钮添加到正在运行detailViewController我contentViewControllers嵌入在NavigationController的导航栏。任何帮助将是伟大的特别SNIPPETS。
作为一个侧面说明,我尝试了一些其他方法出现问题。
- 在
viewDidLoad
设置按钮,而不是viewDidAppear
- 这是行不通的,因为
viewDidLoad
方法不叫你刷卡从一个页面到下每次。然而,viewDidAppear
方法是,所以我试图在那里设置按钮。有可能每次调用viewWillAppear
但我没有检查。
- 这是行不通的,因为
- 在UIPageViewController委托方法
- 这是有问题的,如果用户翻阅的页面快速按钮将无法更改或无法显示设置按钮。
SOLUTION
原来我很接近......而不是在UIPageViewController方法,我只是需要建立在每一个我的三个视图控制器的navigationItem
属性创建按钮。当控制器在委托方法中实例化时,我只需将navigationItem属性设置为与detailViewController相同。在我的viewDidApper
方法中,我可以创建按钮。然后在viewWillDisappear
我将按钮设置为nil
。您也可以创建DetailViewController
的viewdidLoad
按钮并更改各个viewControllers的文本和操作viewDidAppear
。这是一个示例。
在委托方法
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
我打电话基础上的viewController的指标一个辅助方法。助手方法在调用视图控制器时实例化视图控制器。一旦实例化,我设置了一些属性,包括navigationItem属性。
-(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;
}
然后在的viewController的viewDidAppear
我只是这样做
-(void)viewDidAppear:(BOOL)animated
{
UIBarButtonItem *newButton = [[UIBarButtonItem alloc]
initWithTitle:@"Whatever" style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
navItem.rightBarButtonItem = newButton;
}
viewControllers上的navItem属性是什么? –
伟大的解决方案:-) – Fabrizio