2017-08-15 18 views
1

私はSwift/Xcodeを学び、ページビューコントローラを使って前後にスワイプできる3つのページを持つアプリケーションを作成しようとしています。私がUIViewControllerサブクラス、より具体的にはviewDidLoad()関数の中にある問題です。 "NameOfMyClassにはメンバーのデータソース/デリゲートがありません"と "未解決の識別子" setViewControllersが使用されているようなエラーが発生しています。私はこれを実行しようとしたとき、私は黒い画面になるだろう、と今私が原因信号15エラーに終了しますPage View Controller viewDidLoad()Issues

ここでエラーがポップアップされ、関連するコードです:。

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に追加しようとしています!

// 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... 
} 
それを修正するために

一つの方法は、RootPageViewControllerなどのように、すべてのRootPageViewControllersが含まれています別のUIPageViewControllerを持つことです

このような構成では、すべてのエラーが解決され、ストーリーボードでカスタムクラスとしてPagesViewControllerを使用することもできます!

+0

コントローラタイプの不一致がありました。あなたのサンプルコードのように、サブクラスの型を正しいUIPageViewControllerに変更するだけで解決しました。この例をありがとう! –

関連する問題