当 UIPageViewController 改变时改变 UINavigationController 的标题
Posted
技术标签:
【中文标题】当 UIPageViewController 改变时改变 UINavigationController 的标题【英文标题】:Change title of UINavigationController when UIPageViewController changes 【发布时间】:2014-01-02 17:30:04 【问题描述】:我在 Xcode5 中有一个情节提要,其中有一个 UITabbarController
,它有一个链接到 UIViewController
的 UINavigationController
。从最后一个 UIViewController
开始,其余部分(UIPageviewController
和 UITableViewController
是在各自的类中以编程方式创建的。请参见屏幕截图。
问题是在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 中的页面没有改变?