微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决将数据从 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 举报,一经查实,本站将立刻删除。