当 UIPageViewController 改变时改变 UINavigationController 的标题

Posted

技术标签:

【中文标题】当 UIPageViewController 改变时改变 UINavigationController 的标题【英文标题】:Change title of UINavigationController when UIPageViewController changes 【发布时间】:2014-01-02 17:30:04 【问题描述】:

我在 Xcode5 中有一个情节提要,其中有一个 UITabbarController,它有一个链接到 UIViewControllerUINavigationController。从最后一个 UIViewController 开始,其余部分(UIPageviewControllerUITableViewController 是在各自的类中以编程方式创建的。请参见屏幕截图。

问题是在UIPageViewController 的页面发生变化时设置UINavigationController 的标题。我希望标题在 UITableViewController 类上反映 @property,但我不知道如何实现这一点。

我已经尝试在UITableViewController 中使用NSNotification 设置,但是每次用户向左或向右滑动以进入另一个页面时(使用滚动类型时),都不会调用任何方法。我想如果我有一个地方可以放置NSNotification,这样每次用户更改页面时都会调用它来解决我的问题。

希望有人能给我一个指针,在哪里查看或使用什么方法或委托。

【问题讨论】:

【参考方案1】:

我必须在我目前正在开发的应用程序中执行此操作。

首先确保您已将 self.pageViewController.delegate 设置为 self。

这就是我所做的:

// Notice when the pageviewcontroller finishes animating between pages.
- (void)pageViewController:(UIPageViewController *)pageViewController
    didFinishAnimating:(BOOL)finished
   previousViewControllers:(NSArray *)previousViewControllers
   transitionCompleted:(BOOL)completed 

  // .viewControllers[0] is always (in my case at least) the 'current' viewController.
  UIViewController* vc = self.pageViewController.viewControllers[0];
  self.navigationItem.title = vc.navigationItem.title;

“秘密”是 self.pageViewController.viewControllers[0] 是“当前”页面(至少在我拥有的全屏页面的简单左右滑动情况下)。

要使用您的属性而不是 navigationItem 标题,只需将最后一行更改为 self.navigationItem.title = ((MyViewController*)vc).myProperty;

【讨论】:

太棒了,这就像一个魅力!非常感谢您的帮助。 :) 没有问题。祝你的应用好运。【参考方案2】:

上述解决方案一直不适合我。因此,另一种解决方案可能是使用委托,

protocol ChangeTitle 
    func changeTitle(title: String)

在PagerController中实现协议,

class MyPageViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate, ChangeTitle 
func changeTitle(title: String) 
        self.navigationItem.title = title
    

在pagerviewcontroller的单个视图控制器中,

var changeTitle: ChangeTitle?

override func viewDidAppear(_ animated: Bool) 
    changeTitle?.changeTitle(title: "whatever the title is")

您还必须在 pagerviewcontroller 中创建视图控制器的位置分配 changeTitle 变量。

【讨论】:

以上是关于当 UIPageViewController 改变时改变 UINavigationController 的标题的主要内容,如果未能解决你的问题,请参考以下文章

UIPageViewController 索引无法正常工作

UIPageViewController 不改变页面

为啥我的 UIPageViewController 中的页面没有改变?

图像的 UIPageViewController 如何在方向改变时保持图像的纵横比?

改变页面控件的位置

当兄弟是 UIPageViewController 时,UITableView 没有动画