1

Я пытаюсь создать подробное представление документов. Верхняя часть подробного представления - это макет карты высотой 90 пикселей, а ниже - просмотр пейджера между двумя контроллерами: InfoViewController (показать некоторую метаинформацию) и DocumentViewController (show pdf).UIPageViewController: выходы не инициализируются при вызове viewDidLoad

Я выложил контроллер верхнего уровня (DetailViewController) в файле xib с двумя UIViews: 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

Вы вызвали метод setViewControllers: ... в UIPageViewController, не приведет к сбою приложения. – Sandeep

+0

Спасибо! Я добавил эту строку: pageViewController.setViewControllers ([infoVC], направление: UIPageViewControllerNavigationDirection.Forward, анимированный: false, завершение: nil) Но теперь у меня другая проблема: выходы, определенные в InfoViewController и DocumentViewController (те, в пейджере) не инициализируются при вызове метода viewDidLoad. –

+0

Итак, он работает сейчас? – Sandeep

ответ

0

Видимо контроллеры вид были инициализированы с nibname нолю, и именно поэтому выходы были . не установлено

1

Вы должны изменить:

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

To:

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