为啥 Xcode“基于页面的应用程序”项目模板有一个 PageController?

Posted

技术标签:

【中文标题】为啥 Xcode“基于页面的应用程序”项目模板有一个 PageController?【英文标题】:Why does the Xcode "Page-Based Application" project template have a PageController?为什么 Xcode“基于页面的应用程序”项目模板有一个 PageController? 【发布时间】:2017-01-11 07:17:49 【问题描述】:

我正在学习页面控制器,并使用基于页面的应用程序模板创建了一个空白应用程序。默认情况下,它会创建 12 个月的页面,您可以从左到右滚动。

在故事板上有一个页面视图控制器场景和一个页面视图控制器。但是,在代码中,有一些命令可以在根控制器中以编程方式创建此控制器。即

var pageViewController: UIPageViewController?
override func viewDidLoad() 
    super.viewDidLoad()
    // Do any additional setup after loading the view, typically from a nib.
    // Configure the page view controller and add it as a child view controller.
    self.pageViewController = UIPageViewController(transitionStyle: .pageCurl, navigationOrientation: .horizontal, options: nil)
    self.pageViewController!.delegate = self

    let startingViewController: DataViewController = self.modelController.viewControllerAtIndex(0, storyboard: self.storyboard!)!
    let viewControllers = [startingViewController]
    self.pageViewController!.setViewControllers(viewControllers, direction: .forward, animated: false, completion: done in )

    self.pageViewController!.dataSource = self.modelController

    self.addChildViewController(self.pageViewController!)
    self.view.addSubview(self.pageViewController!.view)

    // Set the page view controller's bounds using an inset rect so that self's view is visible around the edges of the pages.
    var pageViewRect = self.view.bounds
    if UIDevice.current.userInterfaceIdiom == .pad 
        pageViewRect = pageViewRect.insetBy(dx: 40.0, dy: 40.0)
    
    self.pageViewController!.view.frame = pageViewRect

    self.pageViewController!.didMove(toParentViewController: self)

事实上,如果我从情节提要中删除页面视图控制器,应用程序就可以像以前一样工作。

我试图理解为什么它会出现在故事​​板上,而它似乎没有被使用。此外,是否有充分的理由以编程方式而不是使用情节提要来创建页面视图控制器?

【问题讨论】:

【参考方案1】:

故事板内部你有一个标准的UIViewController 子类,而不是UIPageViewController。您的UIPageViewController 是在代码中创建的,然后作为子视图添加到此RootViewController。 RootViewController 显示UIPageViewController 并充当其代理。如果您从情节提要中删除任何内容,我认为这将无法正常工作,您确定吗?故事板中没有UIPageViewController 的实例。

【讨论】:

你是对的。我的错。我必须自己将其添加到情节提要中。在询问之前我会更仔细地检查:)

以上是关于为啥 Xcode“基于页面的应用程序”项目模板有一个 PageController?的主要内容,如果未能解决你的问题,请参考以下文章

基于 Xcode 页面的应用程序界面轮换问题

Xcode项目模板与方案

带有 uiwebviews 内存泄漏的基于页面的应用程序

iOS PageViewController 使用故事板具有不同的页面布局

为啥 Xcode 模板的 #imports 与 Prefix.pch 重复?

基于页面的 App,UINavigation 控制器,类似于 iOS 日历