gpt4 book ai didi

ios - XLPagerTabStrip 的 ChildViewController 的动态数量

转载 作者:行者123 更新时间:2023-12-01 22:19:29 24 4
gpt4 key购买 nike

我正在使用 XLPagerTabStrip在 Swift 4 中创建一个基于类别的阅读应用程序。我了解到可以使用以下函数轻松创建静态数量的 ViewController。

override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] { } 

但是,在我的情况下,类别的数量取决于服务器响应,这可能会根据需要发生变化。我试图通过基于我从 json 响应解析的类别名称创建 View Controller 来创建动态数量的选项卡。这是我做的尝试和尝试的方法。
    override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
var childrenVC = [UIViewController]()
for eachCategory in postCategories {
print(eachCategory)
let newVC = self.storyboard?.instantiateViewController(withIdentifier: "FirstTVC") as? FirstTVC
newVC?.childName = eachCategory.name
childrenVC.append(newVC!)
self.reloadPagerTabStripView()
self.reloadInputViews()
}
return childrenVC
}

是的,它失败了。在这种情况下,如何实现标签的动态数量?如果不是,我也愿意接受任何其他选择。我已经完成了 json 响应,但卡在了这一步。此 SO answerGithub Issue也没有帮助。

最佳答案

我有完全相同的情况。如果您从服务器异步获取结果,正如您应该的那样,您将发生崩溃,因为 xlpagertabtrip 至少需要一个 subview Controller 。
我找到的解决方案是在应用程序开始时返回一个虚拟 View Controller ,并在从服务器获取数据以 reloadPagerTabStripView 之后。

在您的父 View Controller 中,您应该创建一个从服务器获取的对象的空数组,例如:

var menuItems = [MenuObject]()

接下来, viewControllers(for pagerTabStripController ... ) 方法应如下所示:
override func viewControllers(for pagerTabStripController: PagerTabStripViewController) -> [UIViewController] {
var children = [UIViewController]()
if menuItems.count == 0 {
let child = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "DummyVC") as! DummyVC
children.append(child)
return children
} else {
let menuItemsUrls = menuItems.map{$0.url}
for menuItem in menuItems {
let child = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "MainVC") as! TelegrafMainVC
child.name = menuItem.name.uppercased
child.url = menuItem.url
children.append(child)
}

return children
}
}

从服务器获取数据后,无论是使用 URLSession、Alamofire 还是其他任何方式,在函数或闭包中都应该放置如下内容:
self.menuItems = menuItems

DispatchQueue.main.async {
self.reloadPagerTabStripView()
}

告诉我是否需要澄清一些事情,但我相信这足以帮助你。
干杯

关于ios - XLPagerTabStrip 的 ChildViewController 的动态数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46766768/

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