gpt4 book ai didi

ios - 将请求数据从 UIPageViewController 传递到 subview

转载 作者:行者123 更新时间:2023-11-30 12:32:51 25 4
gpt4 key购买 nike

我有MainViewController,它是我的UIPageViewController。我想显示 2 个 View FirstDataViewControllerSecondDataViewController

我想执行更新 MainViewControllre 中的 items 的请求,然后将其传递给我的 2 个 subview 。

getData 是我的函数,它包含来自 Request 的数据,然后更新 MainViewController 的 项目

extension MainViewController {
func getData() {
getBasicData() { [weak self] (basicModel) in
guard let strongSelf = self else { return }
strongSelf.getExperienceData() { [weak self] (experienceModel) in
guard let strongSelf = self else { return }

let items = RequestItems(basicData: basicModel,
experienceData: experienceModel)

strongSelf.updateItems(items: items)
}
}
}
}

主视图 Controller :

class MainViewController: UIPageViewController {

var items: RequestItems

let firstDataViewController: FirstDataViewController
let secondDataViewController: SecondDataViewController

let basicDataManager: APIManagerProtocol
let experienceDataManager: APIManagerProtocol

private(set) lazy var orderedViewControllers: [UIViewController] = {
return [self.firstDataViewController, self.secondDataViewController]
}()

convenience init() {
self.init(with: RequestItems())
}

init(with items: RequestItems) {

self.items = items

let apiManager = APIManager()
basicDataManager = apiManager.createBasicDataManager()
experienceDataManager = apiManager.createExperienceDataManager()

self.firstDataViewController = FirstDataViewController(with: items)
self.secondDataViewController = SecondDataViewController(with: items)

super.init(transitionStyle: .scroll, navigationOrientation: .horizontal, options: nil)

self.edgesForExtendedLayout = []
}

func updateItems(items: RequestItems) {
self.items = items
}
}

如何使用getData()函数先更新MainViewController项,然后将数据传递给 subview ?或者也许有更好的选择来做到这一点?

最佳答案

这不是一个好的解决方案。 “GetData”方法需要一些时间才能完全执行,因此您应该:

  • 在加载 MainViewController 之前执行“getData”,然后将“请求项”传递给它并更新您的 View 。

但我假设您的 MainViewController 是应用程序中的第一个 Controller ,因此您应该:

  1. 将完成 block 添加到“getData”方法中:

    func getData(_ completion: [RequestItems] -> ()) {

    getBasicData() { [weak self] (basicModel) in

    guard let strongSelf = self else { return }

    strongSelf.getExperienceData() { [weak self] (experienceModel) in

    guard let strongSelf = self else { return }

    let items = RequestItems(basicData: basicModel,
    experienceData: experienceModel)

    completion(items)
    }
    }
    }
  2. 将“updateItems”方法添加到您的 View Controller 中(而不是将其传递到 init 方法中)

  3. 使用完成处理程序调用“getData”方法,但在 MainViewController init 之外

    init(with items: RequestItems) {
    ...
    self.items = items

    self.firstDataViewController = FirstDataViewController()
    self.secondDataViewController = SecondDataViewController()
    ...
    }

    func viewDidLoad() {
    super.viewDidLoad()

    getBasicData { [weak self] (items) in
    guard let strongSelf = self else { return }


    strongSelf.updateItems(items)
    strongSelf.firstDataViewController.updateItems(with: items)
    strongSelf.secondDataViewController.updateItems(with: items)
    }
    }

    func updateItems(items: RequestItems) {
    self.items = items
    }

关于ios - 将请求数据从 UIPageViewController 传递到 subview ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43276333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com