编程嵌入 segue



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

我的准备工作:

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

在视图中DidLoad:

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

的想法是,一旦我获得图像,我就会以编程方式自己启动 segue。或者,如果我应该以不同的方式执行此操作,任何建议将不胜感激。

你可以

做一些事情,在shouldPerformSegue中返回false,并在加载数据时启动segue即

override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
    if identifier  == "startCarousel" {
        return (detail != nil)
    }
    return  true
}

然后在viewDidLoad

GalleryManager.sharedInstance.getData = { [weak self] 
  (data) in
     self?.performSegue(withIdentifier: "startCarousel", sender: nil)
}

不,您不能延迟嵌入 segue。如果使用嵌入 segue,它会在加载视图控制器后立即触发。

您需要等到数据加载,然后调用setViewControllers(direction:animated:completion)来安装视图控制器,这些控制器将在加载数据后用于显示数据。

Swift 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. 在您自己的页面视图控制器类中定义一个函数:

    func someFunction(){
      //configure your image or swipe page
    }
    
  3. 当您获取图像时,在主视图控制器调用中:

    self.myContainerViewController?.someFunction()
    
你不能

延迟嵌入segue。

您尝试将按钮放入视图控制器中,然后在视图加载设置按钮后单击以设置图像...

最新更新