Swift 将数据从ContainerView传递到UIPageViewController,然后再传递到';s连接的视图控制器
这几天我一直在想这个。我的目标是创建一个应用程序,该应用程序的容器视图连接到UIPageViewController,这样我就可以显示不同数据/视图的页面。(我现有的应用程序,带UITabBarController,带一个数据页/视图) 到目前为止,我已经创建了containerView和UIPageController,以及不同的ViewController,使用了来自此的指导,并浏览了许多So页面,但无法得到我想要的结果 在根VC(Train)中,我有:Swift 将数据从ContainerView传递到UIPageViewController,然后再传递到';s连接的视图控制器,swift,uipageviewcontroller,uicontainerview,Swift,Uipageviewcontroller,Uicontainerview,这几天我一直在想这个。我的目标是创建一个应用程序,该应用程序的容器视图连接到UIPageViewController,这样我就可以显示不同数据/视图的页面。(我现有的应用程序,带UITabBarController,带一个数据页/视图) 到目前为止,我已经创建了containerView和UIPageController,以及不同的ViewController,使用了来自此的指导,并浏览了许多So页面,但无法得到我想要的结果 在根VC(Train)中,我有: override func p
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
print("VCTrain segue ID:\(String(describing: segue.identifier))\n")
if (segue.identifier == "segueTrainContainerViewPages") {
print("prepare for segueTrainContainerViewPages")
let vcContainerView = segue.destination as! VCTrainContainerViewPages
vcContainerView.myLabel = "HELLO" // This gets Passed
// workoutTitle is obtained from the LIBRARY tab once the user clicks
// on a row in the tableview. It is blank until user selects a workout Title
vcContainerView.myLabel1 = workoutTitle // This remains Blank
}
}
这是vctrainecontainerviewpage,它基本上是
导入UIKit
VCTrainContainerViewPages类:UIPageViewController、UIPageViewControllerDataSource、UIPageViewControllerDelegate{
变量页=[UIViewController]()
var myLabel=String()
var myLabel1=String()
重写func viewDidLoad(){
super.viewDidLoad()
self.delegate=self
self.dataSource=self
让page1:UIViewController!=情节提要?.InstanceEviewController(标识符为:“id1”)
让page2:UIViewController!=情节提要?.InstanceEviewController(带标识符:“id2”)
让page3:UIViewController!=情节提要?.InstanceEviewController(带标识符:“id3”)
pages.append(第1页)
pages.append(第2页)
第页。追加(第3页)
SetViewController([page1],方向:UIPageViewController.NavigationDirection.forward,动画:false,完成:nil)
打印(“\nVCTrainContainerViewPages VDL myLabel:\(myLabel)”)
打印(“VCTrainContainerViewPages VDL myLabel1:\(myLabel1)\n”)
}
覆盖函数视图显示(u动画:Bool){
}
func pageViewController(uPageViewController:UIPageViewController,viewController在viewController:UIViewController之前)->UIViewController{
让cur=pages.firstIndex(of:viewController)!
var prev=(cur-1)%pages.count
如果prev<0{
上一页=页数。计数-1
}
返回页[上一页]
}
func pageViewController(pageViewController:UIPageViewController,viewController后的viewController:UIViewController)->UIViewController{
让cur=pages.firstIndex(of:viewController)!
设nxt=abs((cur+1)%pages.count)
返回页[nxt]
}
func presentationIndex(对于pageViewController:UIPageViewController)->Int{
返回页数.count
}
}
目前有效的方法:
在工作场景(不带容器视图/UIPageController)中,我使用ViewDidAspect接收从LIBRARY选项卡传递的数据。是否可以使用ViewDidAppeal传递数据?是否可以显示代码,其中“当用户单击tableview中的一行时,将从库选项卡中获取workoutTitle。在用户选择一个训练标题之前,该代码为空”仅当您触发segue时才会调用“准备”。我知道这是你第一次点击“train”。@claude31“Workoutitle from LIBRARY Tab”的代码几乎所有我阅读的教程都使用prepare for segue作为传递数据的方式,因此我尝试了这一点。感谢您的帮助。您是否可以显示代码,其中“当用户单击tableview中的某一行时,workoutTitle将从LIBRARY选项卡中获取。在用户选择训练标题之前,该代码为空”仅当您触发segue时才调用“Prepare”。我知道这是你第一次点击“train”。@claude31“Workoutitle from LIBRARY Tab”的代码几乎所有我阅读的教程都使用prepare for segue作为传递数据的方式,因此我尝试了这一点。谢谢你的帮助
import UIKit
class VCTrainContainerViewPages: UIPageViewController, UIPageViewControllerDataSource, UIPageViewControllerDelegate {
var pages = [UIViewController]()
var myLabel = String()
var myLabel1 = String()
override func viewDidLoad() {
super.viewDidLoad()
self.delegate = self
self.dataSource = self
let page1: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "id1")
let page2: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "id2")
let page3: UIViewController! = storyboard?.instantiateViewController(withIdentifier: "id3")
pages.append(page1)
pages.append(page2)
pages.append(page3)
setViewControllers([page1], direction: UIPageViewController.NavigationDirection.forward, animated: false, completion: nil)
print("\nVCTrainContainerViewPages VDL myLabel :\(myLabel)")
print("VCTrainContainerViewPages VDL myLabel1:\(myLabel1)\n")
}
override func viewDidAppear(_ animated: Bool) {
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController)-> UIViewController? {
let cur = pages.firstIndex(of: viewController)!
var prev = (cur - 1) % pages.count
if prev < 0 {
prev = pages.count - 1
}
return pages[prev]
}
func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController)-> UIViewController? {
let cur = pages.firstIndex(of: viewController)!
let nxt = abs((cur + 1) % pages.count)
return pages[nxt]
}
func presentationIndex(for pageViewController: UIPageViewController)-> Int {
return pages.count
}
}