2017-08-15 171 views
1

我在学习Swift/Xcode,并试图创建一个具有三个页面的应用程序,您可以使用Page View Controller来回滑动。我遇到的问题在于UIViewController子类,更具体地说是viewDidLoad()函数。我得到的错误,如“值的类型'NameOfMyClass'没有成员数据源/委托”和“使用未解析的标识符”setViewControllers“我跟随了很多教程和检查其他帖子,但没有人似乎有这些问题。当我试图运行此我会得到一个黑色的屏幕,现在我得到一个由于终止信号15错误页面视图控制器viewDidLoad()问题

这里是其中的错误和弹出的相关代码:

import UIKit 

class RootPageViewController: UIViewController, 
UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var viewControllerList:[UIViewController] = { 

     return [self.VCInstance(name: "MissionOne"), 
       self.VCInstance(name: "MissionTwo"), 
       self.VCInstance(name: "MissionThree")] 

    }() 

    private func VCInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "Main", bundle: 
    nil).instantiateViewController(withIdentifier: name) 
    } 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.dataSource = self //...has no member 'dataSource' error 
     self.delegate = self //...has no member 'delegate' error 
     if let MissionOne = viewControllerList.first { 
      setViewControllers([MissionOne], direction: .forward, animated: 
     true, completion: nil) 
     //use of unresolved indentifier 'setViewControllers' error 
     } 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 
    } 

另一个问题我有,可能与此有关,是页面视图控制器不接受/识别我的类文件设置为故事板中的自定义类。

在此先感谢您的任何见解或建议。

回答

0

您RootPageViewController是的UIViewController的子类,而不是一个UIPageViewController

+0

的确修复了。谢谢! –

0

我看来,我认为你在这里混合两种不同的控制器。

你想要做的是将3个RootPageViewController添加到UIPageViewController,但在这里你试图将3个RootPageViewController添加到RootPageViewController!

一个解决它的方法是有一个RootPageViewController和一个单独的UIPageViewController其中将包含所有RootPageViewControllers像这样:

// This is a UIPageViewController containing all RootPages 
class PagesViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var viewControllerList:[UIViewController] = { 

     return [RootPageViewController.VCInstance(name: "MissionOne"), 
      RootPageViewController.VCInstance(name: "MissionTwo"), 
      RootPageViewController.VCInstance(name: "MissionThree")] 

    }() 

    override func viewDidLoad() { 
     super.viewDidLoad() 

     self.dataSource = self 
     self.delegate = self 

     if let MissionOne = viewControllerList.first { 
      setViewControllers([MissionOne], direction: .forward, animated: 
    true, completion: nil) 
     } 

    } 
} 

而且将在UIPageViewController被加入上面的RootPageViewController:

// This is a UIViewController representing a single page 
class RootPageViewController: UIViewController { 

    static func VCInstance(name: String) -> UIViewController { 
     return UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

    // Do what you need a page to do... 
} 

有了这样的构造,您将可以解决所有错误,并且您还可以在故事板中使用PagesViewController作为自定义类!

+0

我肯定有一些控制器类型不匹配正在进行。它只是修改了子类的类型到正确的UIPageViewController,就像你在示例代码中一样。谢谢你的例子! –

相关问题