2015-05-04 20 views
1

我正在嘗試爲文檔創建一個詳細視圖。詳細視圖的頂部是一個90像素高的卡式佈局,下面是兩個控制器之間切換的視圖傳呼機:InfoViewController(顯示一些元信息)和DocumentViewController(顯示pdf)。當調用viewDidLoad時UIPageViewController:出口未初始化

我已經在具有兩個UIViews的xib文件中放置了頂層控制器(DetailViewController):viewForCard和viewForPager。但是,InfoViewController和DocumentViewController中定義的插口在調用其viewDidLoad方法時尚未初始化。任何人有任何想法爲什麼?

在DetailViewController主代碼(用於容器視圖viewForCard和viewForPager約束已被設立在XIB文件:

@IBOutlet weak var viewForCard: UIView! 
@IBOutlet weak var viewForPager: UIView! 

var pageViewController:UIPageViewController = UIPageViewController() 
var infoVC:InfoViewController = InfoViewController() 
var documentVC:DocumentViewController = DocumentViewController() 

override func viewDidLoad() { 
    super.viewDidLoad() 

    pageViewController.delegate = self 
    pageViewController.dataSource = self 
    addChildViewController(pageViewController) 
    pageViewController.setViewControllers([infoVC], direction: UIPageViewControllerNavigationDirection.Forward, animated: false, completion: nil) 
    initLayout() 
} 

func initLayout(){ 
    var cardView:UIView = Card(document: document).contentView 
    cardView.setTranslatesAutoresizingMaskIntoConstraints(false) 

    var pagerView = pageViewController.view 
    pagerView.setTranslatesAutoresizingMaskIntoConstraints(false) 

    viewForCard.addSubview(cardView) 
    viewForPager.addSubview(pagerView) 

    let bindings = ["card": cardView, "pager": pagerView] 
    viewForCard.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0.0-[card]-0.0-|", options: nil, metrics: nil, views: bindings)) 
    viewForCard.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-0.0-[card]-0.0-|", options: nil, metrics: nil, views: bindings)) 

    viewForPager.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-0.0-[pager]-0.0-|", options: nil, metrics: nil, views: bindings)) 
    viewForPager.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("|-0.0-[pager]-0.0-|", options: nil, metrics: nil, views: bindings)) 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController?{ 
    if viewController == documentVC{ 
     return infoVC 
    }else{ 
     return nil 
    } 
} 

func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController?{ 
    if viewController == infoVC{ 
     return documentVC 
    }else{ 
     return nil 
    } 
} 
+1

您是否在UIPageViewController上調用了setViewControllers:...方法,它是否會使應用程序崩潰。 – Sandeep

+0

謝謝!我已經添加了這一行: pageViewController.setViewControllers([infoVC],方向:UIPageViewControllerNavigationDirection.Forward,動畫:false,完成:無) 但現在我有一個不同的問題:InfoViewController和DocumentViewController在尋呼機中)在其viewDidLoad方法被調用時未被初始化。 –

+0

那麼,它現在工作嗎? – Sandeep

回答

0

顯然,視圖控制器用nibname零,這就是爲什麼所述出口分別初始化。不設置

1

你應該改變:

var infoVC:InfoViewController = InfoViewController() 
var documentVC:DocumentViewController = DocumentViewController() 

要:

var infoVC:InfoViewController = InfoViewController(nibName: "InfoViewController", bundle: nil) 
var documentVC:DocumentViewController = DocumentViewController(nibName: "DocumentViewController", bundle: nil)