2017-09-19 375 views
0

我是iOS新手,目前有3個視圖,並希望使用滑動手勢在它們之間導航。滑動工作。紅色的bg視圖會首先按我的需要加載,並且滑動效果很好,但是點按「下一步」按鈕並不會執行任何操作。任何人都可以給我一個提示嗎?我處理這個錯誤,但不能似乎找到谷歌UIPageViewController with child ViewControllers

project

在我的項目的任何幫助,我有處理UIPageViewController一個MemberCardViewController:

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. 
    } 
} 
... 

而現在,我還創建對應於身份證一個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 ^母雞下一步按鈕被點擊Id卡,我想加載成員信息視圖,但現在沒有任何反應,當它被點擊。但是,我在MemberCardViewController的loadViewController()方法中設置了斷點,並且可以看到該應用程序在點擊該按鈕時到達它,但視圖不會更改爲Member Info

+0

沒有從你的代碼中得到任何暗示的問題,你可以請你與我分享你的項目([email protected])。我會看看,並會更新你 – arunjos007

回答

1

您沒有分配任何東西給pvc變量IdCardViewController。因此,當您實例化IdCardViewController的實例時,應該將MemberCardViewController對象分配給pvc變量。祝你好運!

編輯

變化

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

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) 
    } 

什麼都在這裏完成,實例化的IdCardViewController實例中,MemberCardViewController對象(這是self在此之後案例)正被分配給pvc變量。此外,爲了使此代碼正常工作,您必須爲故事板中的「Id卡」視圖控制器分配正確的類。爲此,請在故事板中選擇「Id Card」視圖控制器的對象,並將其類別更改爲「Identity Inspector」中的IdCardViewController。 希望這有助於!

+0

請你詳細說明當IdCardViewController實例化時分配'MemberCardViewController'?我不知道在哪裏寫什麼 – JapanGuy

+0

@JapanGuy我編輯了我的答案,檢查它是否對你有幫助。 –

+0

謝謝你的回答!這很棒! – JapanGuy

相關問題