2017-01-21 59 views
-5

我有一個UIViewControllerUITableView。然後我用兩個viewcontroller創建一個PageViewController。如果我將數據傳遞給孩子,Pageview不起作用。如果我改變當我將數據從TableView傳遞給子頁面控制器時,它可以轉到下一個子頁面

setViewControllers([subjective], direction: .Forward, animated: true, completion: nil) 

setViewControllers([firstVC], direction: .Forward, animated: true, completion: nil) 

綜合瀏覽量的工作,但數據不通過。我對此毫不知情。請幫幫我。由於

代碼工作:

瀏覽量控制器類

import UIKit 

class PageVC : UIPageViewController, UIPageViewControllerDelegate, UIPageViewControllerDataSource { 

var lblhoten = String() 
var lblngaysinh = String() 
var lblsodt = String() 

lazy var VCArr: [UIViewController] = { 
    return [self.VCInstance("ThongTinBNPage2"), 
      self.VCInstance("ThongTinBNPage3")] 
}() 

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

override func viewDidLoad() { 
    super.viewDidLoad() 
    self.dataSource = self 
    self.delegate = self 
    if let firstVC = VCArr.first { 
     let subjective = self.storyboard?.instantiateViewControllerWithIdentifier("ThongTinBNPage2") as! VCSubjective 
     subjective.lblhoten = lblhoten 
     subjective.lblngaysinh = lblngaysinh 
     subjective.lblsodt = lblsodt 
     setViewControllers([subjective], direction: .Forward, animated: true, completion: nil) 
    } 
} 

public func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? { 
    guard let viewcontrollerindex = VCArr.indexOf(viewController) else { 
     return nil 
    } 

    let previousindex = viewcontrollerindex - 1 


    guard previousindex >= 0 else { 
     return VCArr.last 
    } 

    guard VCArr.count > previousindex else { 
     return nil 
    } 

    return VCArr[previousindex] 
} 

public func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? { 
    guard let viewcontrollerindex = VCArr.indexOf(viewController) else { 
     return nil 
    } 

    let nextindex = viewcontrollerindex + 1 


    guard nextindex < VCArr.count else { 
     return VCArr.first 
    } 

    guard VCArr.count > nextindex else { 
     return nil 
    } 

    return VCArr[nextindex] 
} 

public func presentationCountForPageViewController(pageViewController: UIPageViewController) -> Int { 
    return VCArr.count 
} 

// The selected item reflected in the page indicator. 
public func presentationIndexForPageViewController(pageViewController: UIPageViewController) -> Int { 
    guard let firstviewcontroller = viewControllers?.first, 
     let firstviewcontrollerindex = VCArr.indexOf(firstviewcontroller) else { 
      return 0 
    } 

    return firstviewcontrollerindex 
} 

}

VCSubjective:

import UIKit 

class VCSubjective: UIViewController { 

@IBOutlet var hoten: UILabel! 
@IBOutlet var ngaysinh: UILabel! 
@IBOutlet var sodt: UILabel! 

var lblhoten = String() 
var lblngaysinh = String() 
var lblsodt = String() 

override func viewDidLoad() { 
    super.viewDidLoad() 
    // Do any additional setup after loading the view.   
    hoten.text = lblhoten 
    ngaysinh.text = lblngaysinh 
    sodt.text = lblsodt 
} 

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


} 
+0

我爲什麼有兩個downvotes這裏?請評論至少有一個理由來downvote任何人! – ThinhLe

+1

兩位用戶投票結束這個問題,因爲它「不清楚你在問什麼」。也許換個問題。什麼是實際問題,你的問題是什麼。避免像「不起作用」這樣的條款,原因很明顯。你可以[在這裏編輯你的問題](http://stackoverflow.com/posts/41774975/edit)。 – shallowThought

+0

謝謝你。但我認爲我盡力展現。 – ThinhLe

回答

1

這裏的問題是你引用了兩個完全不同的對象。

viewDidLoad中,您創建了ThongTinBNPage2 viewController,然後將其添加到pageViewController的viewControllers屬性中。但是,存儲在VCArr中的對象是兩個完全不同的viewController。

讓我們來想想這樣說:

  1. viewDidLoad是叫你創建的viewController object #1
  2. 然後你指定的viewController object #1到pageViewController的viewControllers對象製作的viewControllers = [object #1]
  3. 值在pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?您引用VCArr對象。在第一次調用VCArr,它懶洋洋地創建了兩個完全不同的視圖控制器對象[object #2, object #3]

爲了解決這個問題,你需要做到以下幾點:

if let firstVC = VCArr.first { 
    let subjective = firstVC // DO NOT create different VC here 
    subjective.lblhoten = lblhoten 
    subjective.lblngaysinh = lblngaysinh 
    subjective.lblsodt = lblsodt 
    setViewControllers([subjective], direction: .Forward, animated: true, completion: nil) 
} 
+0

謝謝你。我更新到xcode 8和swift 3然後完成。 – ThinhLe

相關問題