UIPageViewController:调用viewDidLoad时未初始化插座

问题描述 投票:1回答:3

我正在尝试为文档创建详细视图。详细信息视图的顶部是90像素高的卡片式布局,下面是在两个控制器之间切换的视图寻呼机:InfoViewController(显示一些元信息)和DocumentViewController(显示pdf)。

我已经在带有两个UIView的xib文件中布置了顶层控制器(DetailViewController):viewForCard和viewForPager。但是,当调用它们的viewDidLoad方法时,尚未初始化在InfoViewController和DocumentViewController中定义的出口。有人知道为什么吗?

DetailViewController中的主要代码(已在xi​​b文件中设置了容器视图viewForCard和viewForPager的约束:

@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
    }
}
swift uiviewcontroller uipageviewcontroller containment
3个回答
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)

0
投票

显然,视图控制器是用nibname nil初始化的,这就是为什么未设置出口的原因。


0
投票

在Swift 5

像这样初始化viewController。

let firstVC:FirstVC = storyboard?.instantiateViewController(withIdentifier: "FirstVC") as! FirstVC'

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

© www.soinside.com 2019 - 2024. All rights reserved.