将数据从 ContainerView 传递到 UIPageViewController 然后连接 ViewController

问题描述

这几天我一直在思考这个问题。我的目标是创建一个具有连接到 UIPageViewController 的容器视图的应用程序,以便我可以显示不同数据/视图的页面。 (我现有的带有 UITabBarController 的应用程序,带有 1 个单数据页面/视图)

enter image description here

到目前为止,我已经使用 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
  }
}

目前有效:

  1. UIPageViewController 工作(滑动工作和所有 3 个视图控制器移动)
  2. MyLabel 从 MainVC 传递到 UIPageViewController(训练容器视图页面

我需要做什么

  1. 标签中的锻炼标题。这会从库选项卡(一旦用户选择锻炼)传递到训练选项卡,然后传递到训练容器视图页面

Root VC (Train) 中的准备 Segue 函数仅在 TRAIN 页面的初始加载期间调用 1x。此页面的后续加载不会再次调用 prepareForSegue。

在工作场景中(没有容器视图/UIPageController),我使用 ViewDidAppear 接收从 LIBRARY 选项卡传递的数据。是否可以使用ViewDidAppear来传递数据?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...