如何解决将数据从 ContainerView 传递到 UIPageViewController 然后连接 ViewController
这几天我一直在思考这个问题。我的目标是创建一个具有连接到 UIPageViewController 的容器视图的应用程序,以便我可以显示不同数据/视图的页面。 (我现有的带有 UITabBarController 的应用程序,带有 1 个单数据页面/视图)
到目前为止,我已经使用 https://stackoverflow.com/a/26024779/14414215 中的指导创建了 containerView 和 UIPageController 以及不同的 ViewController,并且浏览了很多 SO 页面,但无法获得我想要的结果。
在根 VC(火车)中,我有这个:
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
}
}
这是 VCTrainContainerViewPages,它基本上是 https://stackoverflow.com/a/26024779/14414215
的复制/粘贴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
}
}
目前有效:
- UIPageViewController 工作(滑动工作和所有 3 个视图控制器移动)
- MyLabel 从 MainVC 传递到 UIPageViewController(训练容器视图页面)
我需要做什么
Root VC (Train) 中的准备 Segue 函数仅在 TRAIN 页面的初始加载期间调用 1x。此页面的后续加载不会再次调用 prepareForSegue。
在工作场景中(没有容器视图/UIPageController),我使用 ViewDidAppear 接收从 LIBRARY 选项卡传递的数据。是否可以使用ViewDidAppear来传递数据?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。