为啥 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?的主要内容,如果未能解决你的问题,请参考以下文章
iOS PageViewController 使用故事板具有不同的页面布局