UIPageViewController。如何设置自定义 UIViewControllers 数组
Posted
技术标签:
【中文标题】UIPageViewController。如何设置自定义 UIViewControllers 数组【英文标题】:UIPageViewController. How to set up the array of custom UIViewControllers 【发布时间】:2019-05-28 20:26:39 【问题描述】:我有一组 4 个 UIViewController,都有自己的自定义类,并且我设置了委托。到目前为止,我的主视图中有容器视图,这些视图被滚动到屏幕外,这就是我正在做一个“伪页面视图控制器”的方式。但是,为了培训,我想使用 UIPageViewController 将其转换为实际的页面视图控制器。 我看过一堆教程,但大多数人只使用一个视图控制器并更改其中的文本以显示多个。就我而言,我有 4 个自定义视图控制器:
var glanceController: GlanceVC!
var goalsController: GoalsVC!
var commuteController: CommuteVC!
var compareController: CompareVC!
在我之前的伪页面视图控制器上,我这样初始化它们:
func loadVC()
glanceController = self.storyboard?.instantiateViewController(withIdentifier: "sbGlance") as? GlanceVC
goalsController = self.storyboard?.instantiateViewController(withIdentifier: "sbGoals") as? GoalsVC
commuteController = self.storyboard?.instantiateViewController(withIdentifier: "sbCommute") as? CommuteVC
compareController = self.storyboard?.instantiateViewController(withIdentifier: "sbCompare") as? CompareVC
现在据我了解,UIPageViewController 需要一组 UIViewController。但是我不能创建这个数组:
var VCArray: [UIViewController] = [glanceController, goalsController, commuteController, compareController]
错误:无法在属性初始化程序中使用实例成员“glancecontrolleer”。
我尝试改为声明一个空白数组 var VCArray: [UIViewcontroller] = [] 然后在
之后添加func loadVC()
glanceController = self.storyboard?.instantiateViewController(withIdentifier: "sbGlance") as? GlanceVC
goalsController = self.storyboard?.instantiateViewController(withIdentifier: "sbGoals") as? GoalsVC
commuteController = self.storyboard?.instantiateViewController(withIdentifier: "sbCommute") as? CommuteVC
compareController = self.storyboard?.instantiateViewController(withIdentifier: "sbCompare") as? CompareVC
VCArray += glanceController
但是,这也有一个错误:“Argument Type @value glanceVC? 不符合预期的类型“Sequence”。
有人可以帮我为我的 uipageview 制作这个自定义视图控制器数组吗?
【问题讨论】:
【参考方案1】:创建一个计算属性并返回视图控制器数组
var VCArray: [UIViewController]
if let glanceController = self.storyboard?.instantiateViewController(withIdentifier: "sbGlance") as? GlanceVC,
let goalsController = self.storyboard?.instantiateViewController(withIdentifier: "sbGoals") as? GoalsVC,
let commuteController = self.storyboard?.instantiateViewController(withIdentifier: "sbCommute") as? CommuteVC,
let compareController = self.storyboard?.instantiateViewController(withIdentifier: "sbCompare") as? CompareVC
return [glanceController, goalsController, commuteController, compareController]
return []
【讨论】:
嗨,谢谢,它不会触发任何错误。但是它根本没有运行。我在 return 命令之前添加了一个 "print("TESTTEST" 并且它似乎没有运行它,所以我假设 if 语句是错误的。 @dvd.Void 视图控制器在此行返回return [glanceController, goalsController, commuteController, compareController]
在此行之前尝试打印或使用断点以上是关于UIPageViewController。如何设置自定义 UIViewControllers 数组的主要内容,如果未能解决你的问题,请参考以下文章
如何以编程方式在 Xcode 中快速设置 UIPageViewController 的过渡样式?
故事板:如何使用故事板为 UIPageViewController 设置初始视图控制器?
如何在XIB(Interface Builder)中使用UIPageViewController的子类来设置DataSource、Delegate和TransitionStyle
UIPageViewController - 如何在横向模式下自定义左右页面?