Ben*_*Ben 11 uinavigationbar uinavigationcontroller uibarbuttonitem ios uipageviewcontroller
请原谅我,已经有很多关于如何以编程方式将UIBarButtonItem添加到NavigationBar的问题,但我似乎无法让任何解决方案在我的情况下工作.
这是我一直在学习UIPageViewController的简单测试应用程序的布局.

我有页面视图控制器与三个独特的viewControllers很好地工作.我现在想rightBarButtonItems为每个视图控制器设置唯一.我可以轻松地设置一个共同barButtonItem的DetailViewController通过简单地这样做.
UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"Whatever"
style:UIBarButtonItemStylePlain
target:self
action:@selector(doSomething)];
self.navigationItem.rightBarButtonItem = newButton;
Run Code Online (Sandbox Code Playgroud)
鉴于我需要为这三个页面中的每个页面都有一个独特的按钮,pageViewController我无法在中设置按钮detailViewController.我viewDidAppear在三个控制器上尝试了上面的代码, 但按钮不会出现.我也尝试以相同的方式创建按钮,然后设置它,没有运气.
DetailViewController *vc = [[DetailViewController alloc] init];
vc.navigationItem.rightBarButtonItem = newButton;
Run Code Online (Sandbox Code Playgroud)
我知道我离这里很近,我只是不确定如何指定我需要在NavigationController的NavigationBar中添加一个按钮,该按钮运行我的contentViewControllers所嵌入的detailViewController.任何帮助都会很棒特别是SNIPPETS.
作为旁注,我尝试了一些其他方法,这些方法都存在问题.
viewDidLoad而不是viewDidAppear
viewDidLoad每次从一个页面滑动到下一个页面时都不会调用该方法.viewDidAppear然而,方法是我试图在那里设置按钮.有可能viewWillAppear每次调用,但我没有检查.解
事实证明我很接近...而不是在UIPageViewController方法中创建按钮,我只需要navigationItem在我的三个视图控制器中创建一个属性.当控制器在委托方法中实例化时,我只需将navigationItem属性设置为等于detailViewController的属性.在我的viewDidApper方法中,我可以创建按钮.然后在viewWillDisappear我将按钮设置为nil.你也可以在创建按钮viewdidLoad的DetailViewController和更改文本和行动viewDidAppear的各个viewControllers的.这是一个例子.
在委托方法中
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController
- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController
Run Code Online (Sandbox Code Playgroud)
我基于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;
}
Run Code Online (Sandbox Code Playgroud)
然后在viewDidAppearviewController中我就这样做了
-(void)viewDidAppear:(BOOL)animated
{
UIBarButtonItem *newButton = [[UIBarButtonItem alloc]
initWithTitle:@"Whatever" style:UIBarButtonItemStylePlain target:self action:@selector(doSomething)];
navItem.rightBarButtonItem = newButton;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要在每次更改查看的页面时更改按钮,则必须在您尝试过的委托方法之一中完成。不过,我建议您只需更改标题,而不是创建新按钮并将其设置为导航项。
您可以在界面生成器中创建按钮并将其链接到您的属性中DetailViewController,然后每次转到新页面时调用该按钮setTitle:forState。UIControlStateNormal
如果您需要按钮为每个页面执行不同的操作,我建议在按钮操作方法中检查当前页面,而不是每次都声明一个新页面。
| 归档时间: |
|
| 查看次数: |
10852 次 |
| 最近记录: |