【问题标题】:UIPageViewController. How to set up the array of custom UIViewControllersUIPageViewController。如何设置自定义 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 制作这个自定义视图控制器数组吗?

【问题讨论】:

    标签: ios swift xcode uipageviewcontroller


    【解决方案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] 在此行之前尝试打印或使用断点
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多