2017-04-08 67 views
2

我正在使用页面视图控制器在我的应用中实现图像轮播。我有一个容器视图在我的父视图控制器中有一个嵌入页面视图控制器。我遇到的问题是当我需要离开并异步获取这些图像,并且在viewDidLoad获取图像之前发生了继续。Programmatic embed segue

我的赛格瑞准备:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) { 
    if segue.identifier == "startCarousel" { 
    let carouselPageViewController = segue.destination as! CarouselPageViewController 
    carouselPageViewController.images = carouselImages 
    } 
} 

在viewDidLoad中:

GalleryManager.sharedInstance.getData = { 
    (data) in 
    // Assign images to instance property here ...  
} 

我的想法是,一旦我得到一些编程方式启动SEGUE自己的图像。或者,如果我应该以不同的方式来做这个任何建议,我们将非常感激。

+2

获取的图像中嵌入视图控制器,而不是嵌入式视图控制器,或者保留对嵌入式视图控制器的引用,并在拥有它们后更新图像属性。 – Paulw11

+0

我同意@ Paulw11或者你可以在viewWillAppear或viewDidAppear中移动getData函数,因此函数在加载图像时不会造成延迟。 –

回答

2

不,你不能延迟嵌入segue。如果您使用嵌入式segue,只要装入视图控制器就会触发。

您需要等待数据加载完毕,然后调用setViewControllers(direction:animated:completion)来安装视图控制器,一旦数据加载后您将使用这些视图控制器来显示数据。

0

你不能延迟嵌入segue。

你试图把按钮在视图控制器,然后后视图负载设定按钮,点击设置图像...

1

斯威夫特3,Xcode中8

您可以用这种方式实现:

  1. 设置在masterViewController在prepareForSegue到你的页面视图控制器的引用:

    var myContainerViewController: UIPageViewController? 
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) 
    { 
        if segue.identifier == "embedSegue" { 
        if let destination = segue.destination as? YourPageViewControllerClass { 
         self.myContainerViewController = destination 
        } 
    } 
    
  2. 在自己的pageViewController类中定义的函数:

    func someFunction(){ 
        //configure your image or swipe page 
    } 
    
  3. 当你得到的图像,在您的masterViewController电话:

    self.myContainerViewController?.someFunction()