gpt4 book ai didi

ios - 如何在使用 UIPageViewController 时将 UIBarButtonItem 添加到 NavigationBar

转载 作者:技术小花猫 更新时间:2023-10-29 10:52:55 25 4
gpt4 key购买 nike

请原谅我,已经有大量关于如何以编程方式将 UIBarButtonItem 添加到 NavigationBar 的问题,但我似乎无法找到适合我的情况的任何解决方案。

这是一个简单的测试应用程序的布局,我一直在使用它来学习 UIPageViewController。

storyboard

我的页面 View Controller 与三个独特的 viewController 配合得很好。我现在想为每个 View Controller 设置唯一的 rightBarButtonItems。只需执行此操作,我就可以在 DetailViewController 中轻松设置一个通用的 barButtonItem

UIBarButtonItem *newButton = [[UIBarButtonItem alloc] initWithTitle:@"Whatever" 
style:UIBarButtonItemStylePlain
target:self
action:@selector(doSomething)];

self.navigationItem.rightBarButtonItem = newButton;

鉴于我需要为 pageViewController 中的三个页面中的每一个设置一个唯一的按钮,我无法在 detailViewController 中设置按钮。我已经在三个 Controller 的 viewDidAppear 中尝试了上面的代码,但是按钮不会出现。我也尝试过以相同的方式创建按钮,然后像这样设置它,但没有成功。

DetailViewController *vc = [[DetailViewController alloc] init];
vc.navigationItem.rightBarButtonItem = newButton;

我知道我离这里很近,我只是不确定如何指定我需要向 NavigationController 的 NavigationBar 添加一个按钮,该按钮正在运行嵌入了我的 contentViewController 的 detailViewController。任何帮助都会非常有用,尤其是片段。

作为旁注,我尝试了其他一些出现问题的方法。

  • viewDidLoad 而不是 viewDidAppear 中设置按钮
    • 这将不起作用,因为每次从一个页面滑动到下一个页面时,都不会调用 viewDidLoad 方法。但是 viewDidAppear 方法是这样的,所以我试图在那里设置按钮。有可能 viewWillAppear 每次都被调用,但我没有检查过。
  • 在 UIPageViewController 委托(delegate)方法中设置按钮
    • 如果用户快速翻阅页面,按钮将无法更改或无法显示,这是有问题的。

解决方案

事实证明我很接近......我不需要在 UIPageViewController 方法中创建按钮,我只需要在我的三个 View Controller 中的每一个中创建一个 navigationItem 属性。当在委托(delegate)方法中实例化 Controller 时,我只需将 navigationItem 属性设置为等于 detailViewController 的属性。这样在我的 viewDidApper 方法中我可以创建按钮。然后在 viewWillDisappear 处,我将按钮设置为 nil。您还可以只在 DetailViewControllerviewdidLoad 处创建按钮,并在各个 viewController 的 viewDidAppear 中更改文本和操作。这是一个示例。

在委托(delegate)方法中

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerBeforeViewController:(UIViewController *)viewController

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController

我根据 viewController 的索引调用辅助方法。辅助方法在调用时实例化 View Controller 。实例化后,我设置了一些属性,包括 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;

}

最佳答案

如果您每次更改查看的页面时都需要更改按钮,则必须在您尝试过的委托(delegate)方法之一中完成。但是,我建议不要创建新按钮并将其设置为导航项,而只需更改标题即可。

您可以在界面生成器中创建按钮并将其链接到您的 DetailViewController 中的属性,然后调用 setTitle:forStateUIControlStateNormal每次转到新页面时都会出现该按钮。

如果您需要按钮为每个页面执行不同的操作,我建议您在按钮操作方法中检查当前页面,而不是每次都声明一个新页面。

关于ios - 如何在使用 UIPageViewController 时将 UIBarButtonItem 添加到 NavigationBar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21734306/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com