Swift 在PageViewController中为每个页面设置UINavigationBar标题

Swift 在PageViewController中为每个页面设置UINavigationBar标题,swift,Swift,我已将pageViewController(嵌入NavigationController中)设置为一组ViewController,以用作页面(如下所示): 我想知道我怎么能拥有它,这样当用户在浏览页面时,UINavigationBar的标题会变为他们正在查看的视图的标题?e、 g:当用户查看mondayViewController时,标题是monday,他们可以滑动到周二,标题将更改,等等 欢迎提出任何建议 谢谢 代码中有一些错误,首先没有UIPageViewControllerDelegat

我已将pageViewController(嵌入NavigationController中)设置为一组ViewController,以用作页面(如下所示):

我想知道我怎么能拥有它,这样当用户在浏览页面时,UINavigationBar的标题会变为他们正在查看的视图的标题?e、 g:当用户查看mondayViewController时,标题是monday,他们可以滑动到周二,标题将更改,等等

欢迎提出任何建议


谢谢

代码中有一些错误,首先没有
UIPageViewControllerDelegate
,因此永远不会调用委托方法

那么,我不知道你的
PageViewController
是否真的有
UINavigationController
。要确保您可以通过选择
PageViewController
嵌入它,并制作与图片中相同的内容:

因此,您可以在故事板中看到
UINavigationController
UIPageViewController
如下所示:

使用每个情节提要id创建一整天
UIViewController
后,例如周一:

您可以修改代码,如下所示:

   import UIKit
    class PageViewController: UIPageViewController,UIPageViewControllerDelegate {
        var arrayIndex: Int = 0
        var pageControl = UIPageControl.self
        private(set) lazy var orderedViewControllers: [UIViewController] = {
            return [self.newDayViewController("monday"),
                    self.newDayViewController("tuesday"),
                    self.newDayViewController("wednesday"),
                    self.newDayViewController("thursday"),
                    self.newDayViewController("friday"),
                    self.newDayViewController("saturday"),
                    self.newDayViewController("sunday")
            ]
        }()

        override func viewDidLoad() {
            super.viewDidLoad()

            dataSource = self
            delegate = self
            if let firstViewController = orderedViewControllers.first {
                self.navigationController!.navigationBar.topItem!.title = "monday"
                setViewControllers([firstViewController],
                                   direction: .Forward,
                                   animated: true,
                                   completion: nil)
            }
        }

        private func newDayViewController(day: String) -> UIViewController {
            return UIStoryboard(name: "Main", bundle: nil) .
                instantiateViewControllerWithIdentifier("\(day)")
        }

        func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
            if (!completed) {
                return
            }

            if let firstViewController = viewControllers?.first,
                let arrayIndex = orderedViewControllers.indexOf(firstViewController) {
                switch arrayIndex {
                case 0:
                    self.navigationController!.navigationBar.topItem!.title = "Monday"
                    break

                case 1:
                     self.navigationController!.navigationBar.topItem!.title = "Tuesday"
                    break

                case 2:
                     self.navigationController!.navigationBar.topItem!.title = "Wednesday"
                    break

                case 3:
                     self.navigationController!.navigationBar.topItem!.title = "Thursday"
                default:
                     self.navigationController!.navigationBar.topItem!.title = "Timetable"


                }
            }
        }
    }
    extension PageViewController: UIPageViewControllerDataSource {
        func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
            guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
                return nil
            }
            let previousIndex = viewControllerIndex - 1
            guard previousIndex >= 0 else {
                return orderedViewControllers.last
            }
            guard orderedViewControllers.count > previousIndex else {
                return nil
            }
            return orderedViewControllers[previousIndex]
        }

        func pageViewController(pageViewController: UIPageViewController,
                                viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
            guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
                return nil
            }
            let nextIndex = viewControllerIndex + 1
            let orderedViewControllersCount = orderedViewControllers.count
            //MARK: - determine which viewController the user is o
            guard orderedViewControllersCount != nextIndex else {
                return orderedViewControllers.first
            }
            guard orderedViewControllersCount > nextIndex else {
                return nil
            }
            return orderedViewControllers[nextIndex]
        }
        func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
            return orderedViewControllers.count
        }
        func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
            guard let firstViewController = viewControllers?.first,
                firstViewControllerIndex = orderedViewControllers.indexOf(firstViewController) else {
                    return 0
            }
            return firstViewControllerIndex
        }
    }

完美的非常感谢亚历山德罗!完成!我不能给它打分,因为我是论坛的新手,没有代表积分
   import UIKit
    class PageViewController: UIPageViewController,UIPageViewControllerDelegate {
        var arrayIndex: Int = 0
        var pageControl = UIPageControl.self
        private(set) lazy var orderedViewControllers: [UIViewController] = {
            return [self.newDayViewController("monday"),
                    self.newDayViewController("tuesday"),
                    self.newDayViewController("wednesday"),
                    self.newDayViewController("thursday"),
                    self.newDayViewController("friday"),
                    self.newDayViewController("saturday"),
                    self.newDayViewController("sunday")
            ]
        }()

        override func viewDidLoad() {
            super.viewDidLoad()

            dataSource = self
            delegate = self
            if let firstViewController = orderedViewControllers.first {
                self.navigationController!.navigationBar.topItem!.title = "monday"
                setViewControllers([firstViewController],
                                   direction: .Forward,
                                   animated: true,
                                   completion: nil)
            }
        }

        private func newDayViewController(day: String) -> UIViewController {
            return UIStoryboard(name: "Main", bundle: nil) .
                instantiateViewControllerWithIdentifier("\(day)")
        }

        func pageViewController(pageViewController: UIPageViewController, didFinishAnimating finished: Bool, previousViewControllers: [UIViewController], transitionCompleted completed: Bool) {
            if (!completed) {
                return
            }

            if let firstViewController = viewControllers?.first,
                let arrayIndex = orderedViewControllers.indexOf(firstViewController) {
                switch arrayIndex {
                case 0:
                    self.navigationController!.navigationBar.topItem!.title = "Monday"
                    break

                case 1:
                     self.navigationController!.navigationBar.topItem!.title = "Tuesday"
                    break

                case 2:
                     self.navigationController!.navigationBar.topItem!.title = "Wednesday"
                    break

                case 3:
                     self.navigationController!.navigationBar.topItem!.title = "Thursday"
                default:
                     self.navigationController!.navigationBar.topItem!.title = "Timetable"


                }
            }
        }
    }
    extension PageViewController: UIPageViewControllerDataSource {
        func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
            guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
                return nil
            }
            let previousIndex = viewControllerIndex - 1
            guard previousIndex >= 0 else {
                return orderedViewControllers.last
            }
            guard orderedViewControllers.count > previousIndex else {
                return nil
            }
            return orderedViewControllers[previousIndex]
        }

        func pageViewController(pageViewController: UIPageViewController,
                                viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
            guard let viewControllerIndex = orderedViewControllers.indexOf(viewController) else {
                return nil
            }
            let nextIndex = viewControllerIndex + 1
            let orderedViewControllersCount = orderedViewControllers.count
            //MARK: - determine which viewController the user is o
            guard orderedViewControllersCount != nextIndex else {
                return orderedViewControllers.first
            }
            guard orderedViewControllersCount > nextIndex else {
                return nil
            }
            return orderedViewControllers[nextIndex]
        }
        func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int {
            return orderedViewControllers.count
        }
        func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int {
            guard let firstViewController = viewControllers?.first,
                firstViewControllerIndex = orderedViewControllers.indexOf(firstViewController) else {
                    return 0
            }
            return firstViewControllerIndex
        }
    }