swift - UIPageViewController:调用 viewDidLoad 时 socket 未初始化

标签 swift uiviewcontroller uipageviewcontroller containment

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

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

DetailViewController中的主要代码(容器 View 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
    }
}

最佳答案

你应该改变:

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

收件人:

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

关于swift - UIPageViewController:调用 viewDidLoad 时 socket 未初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30028009/

相关文章:

ios - 使用 swift 后台获取本地通知

ios - 将 UITableViewCell 保持在其他单元格的前面

ios - 未调用 UIPageViewController 委托(delegate)方法

ios - 在 pageViewController 内的 tableView 上滑动以删除

ios - 将 MvvmCross 与 UIPageViewController 一起使用

ios - 如何获取数组(或某些数据结构?)中的 Assets.xcassets 文件名

ios - 如何在 UIViews 和 SKNodes 之间转换点

ios - 来自另一个 View Controller 时的 xcode 问题

ios - UIScrollView 中的 UIViewControllers?

memory-leaks - UIPageViewController内存泄漏