程序化嵌入转场
Programmatic embed segue
我正在使用页面视图控制器在我的应用程序中实现图像轮播。我的父视图控制器中有一个容器视图,它具有到页面视图控制器的嵌入转场。我遇到的问题是当我需要关闭并异步获取这些图像时,segue 发生在 viewDidLoad 获取图像之前。
我准备继续:
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。或者,如果我应该以不同的方式执行此操作,我们将不胜感激。
不,您不能延迟嵌入转场。如果您使用嵌入 segue,它会在加载视图控制器后立即触发。
您需要等待数据加载,然后调用 setViewControllers(direction:animated:completion)
安装视图控制器,数据加载后您将使用这些视图控制器显示数据。
您不能延迟嵌入转场。
您尝试将按钮放在视图控制器中,然后在视图加载设置按钮后单击以设置图像...
Swift3,Xcode8
你可以这样实现:
在 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中定义一个函数class:
func someFunction(){
//configure your image or swipe page
}
当您获取图像时,在您的 masterViewController 调用中:
self.myContainerViewController?.someFunction()
你可以做类似的事情,return false in shouldPerformSegue
并在加载数据时启动 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 发生在 viewDidLoad 获取图像之前。
我准备继续:
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。或者,如果我应该以不同的方式执行此操作,我们将不胜感激。
不,您不能延迟嵌入转场。如果您使用嵌入 segue,它会在加载视图控制器后立即触发。
您需要等待数据加载,然后调用 setViewControllers(direction:animated:completion)
安装视图控制器,数据加载后您将使用这些视图控制器显示数据。
您不能延迟嵌入转场。
您尝试将按钮放在视图控制器中,然后在视图加载设置按钮后单击以设置图像...
Swift3,Xcode8
你可以这样实现:
在 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中定义一个函数class:
func someFunction(){ //configure your image or swipe page }
当您获取图像时,在您的 masterViewController 调用中:
self.myContainerViewController?.someFunction()
你可以做类似的事情,return false in shouldPerformSegue
并在加载数据时启动 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)
}