我正在使用页面视图控制器在我的应用中实现图像轮播。我的父视图控制器中有一个容器视图,它有一个嵌入到页面视图控制器的segue。我遇到的问题是当我需要离开并异步获取这些图像并且在viewDidLoad获取图像之前发生了segue。
我为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。或者,如果我以不同的方式这样做,我们将非常感谢任何建议。
答案 0 :(得分:2)
不,你不能延迟嵌入segue。如果你使用嵌入segue,它会在视图控制器加载后立即触发。
您需要等到数据加载后再调用setViewControllers(direction:animated:completion)
来安装视图控制器,您将在加载数据后显示数据。
答案 1 :(得分:2)
您可以执行类似操作,在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)
}
答案 2 :(得分:1)
Swift 3,Xcode 8
你可以通过这种方式实现:
在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
}
}
在您自己的pageViewController类中定义一个函数:
func someFunction(){
//configure your image or swipe page
}
获取图像时,在masterViewController调用中:
self.myContainerViewController?.someFunction()
答案 3 :(得分:0)
你不能推迟嵌入segue。
您尝试将按钮放在视图控制器中,然后在查看加载设置按钮后单击以设置图像...