2017-09-19 7 views
0

私はiOSが新しく、現在3つのビューを持ち、スワイプジェスチャーを使ってそれらの間を移動したいと考えています。スワイプが動作します。最初に赤いbgビューが読み込まれ、スワイプはうまく動作しますが、[次へ]ボタンをタップすると何もしません。誰も私にヒントを与えてくれませんか?子ViewControllerを持つUIPageViewController

class MemberCardViewController: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate { 

    lazy var viewArray: [UIViewController] = { 

     return [self.ViewControllerInstance(name: "CalendarView"), 
       self.ViewControllerInstance(name: "IdCardView"), 
       self.ViewControllerInstance(name: "MemberInfoView")] 
    }() 

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

    override func viewDidLoad() { 
     super.viewDidLoad() 
     self.dataSource = self 
     self.delegate = self 
     loadViewController(viewPosition: 1) 
    } 

    func loadViewController(viewPosition: Int) { 
     if let viewController = viewArray.get(at: viewPosition) { 
      setViewControllers([viewController], direction: .forward, animated: true, completion: nil) 
     } 
    } 

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

そして今のところ、私はまた、作成した:私はUIPageViewControllerを扱うMemberCardViewControllerを持って、この間違ったに近づいていますが、Google

私のプロジェクトで

project

上の任意のヘルプを見つけるように見えるカントIdCardに対応するIdCardViewController(赤い背景ビュー)

class IdCardViewController: UIViewController { 

    var pvc = MemberCardViewController() 

    @IBAction func loadRight(_ sender: Any) { 
     pvc.loadViewController(viewPosition: 2) 
    } 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     // Do any additional setup after loading the view. 
    } 

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

私が今直面している問題は、w hen次のボタンをIdカードでクリックすると、Member Infoビューがロードされますが、クリックすると何も起こりません。しかし、私はMemberCardViewControllerのloadViewController()メソッドでブレークポイントを設定し、ボタンがクリックされたときにアプリケーションが到達しているのを見ることができますが、ビューはMember Infoに変わりません。

+0

あなたのコードから問題のヒントが得られない場合は、プロジェクトを私と共有してください([email protected])。私は見て、あなたを更新します – arunjos007

答えて

1

pvc変数IdCardViewControllerには何も割り当てられていません。したがって、IdCardViewControllerのインスタンスをインスタンス化するときは、MemberCardViewControllerオブジェクトをpvc変数に割り当てる必要があります。がんばろう!

private func ViewControllerInstance(name: String) -> UIViewController { 
     if name == "IdCardView" 
     { 
      if let vc = UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) as? IdCardViewController { 
       vc.pvc = self 
       return vc 
      } 

     } 
     return UIStoryboard(name: "MemberCardViewController", bundle: nil).instantiateViewController(withIdentifier: name) 
    } 

EDIT

変更

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

ここで行われる何IdCardViewControllerのインスタンスをインスタンス化した後、ある、この中selfあるMemberCardViewControllerのオブジェクト(ケース)がpvc変数に割り当てられています。また、このコードを動作させるためには、ストーリーボードの "Id Card"ビューコントローラに適切なクラスを割り当てる必要があります。これを行うには、ストーリーボードで「Idカード」ビューコントローラのオブジェクトを選択し、「アイデンティティインスペクタ」でクラスをIdCardViewControllerに変更します。 これが役立つことを願っています!

+0

IdCardViewControllerがインスタンス化されるときに 'MemberCardViewController'を割り当てることについて詳しく教えてください。 – JapanGuy

+0

@JapanGuy私は自分の答えを編集して、それがあなたを助けるかどうかを調べます。 –

+0

ありがとうございました!これは素晴らしい! – JapanGuy

関連する問題