ios - 如何将 viewControllers 放入循环数组中?
问题描述
我正在尝试使用自定义选项卡 viewController,用户可以在其中以他/她喜欢的方式添加/重新排列它们。在下面的代码中我只需要返回数组计数并显示数组项,我设法通过数组的数量来完成,但是当它作为单个数组代码使用时,它只显示一个视图控制器!
这是代码:
class ContainerController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let selectedViewControllers = [Home(),Index(),Favourite(),Library()]
let selectedViewControllersProperties = ["Home","Index","Favourite","Library"]
viewControllers = [createController(title: "\(selectedViewControllersProperties[0])".localized, imageName: "\(selectedViewControllersProperties[0])", vc: selectedViewControllers[0]),
createController(title: "\(selectedViewControllersProperties[1])", imageName: "\(selectedViewControllersProperties[1])", vc: selectedViewControllers[1]),
createController(title: "\(selectedViewControllersProperties[2])", imageName: "\(selectedViewControllersProperties[2])", vc: selectedViewControllers[2]),
createController(title: "\(selectedViewControllersProperties[3])", imageName: "\(selectedViewControllersProperties[3])", vc: selectedViewControllers[3]),]
}
// MARK: - Handlers
func createController(title: String, imageName: String, vc: UIViewController) -> UINavigationController{
let recentVC = UINavigationController(rootViewController: vc)
recentVC.tabBarItem.title = title
recentVC.tabBarItem.image = UIImage(named: imageName)
return recentVC
}
}
当尝试改用这个数组时,它只显示一个 viewController:
let tabCount = selectedViewControllersProperties.count - 1
for i in 0...tabCount {
viewControllers = [createController(title: "\(selectedViewControllersProperties[i])".localized, imageName: "\(selectedViewControllersProperties[i])", vc: selectedViewControllers[i])]
}
我在这里做错了什么,请帮助我解决它。
解决方案
在 for 循环的每次迭代中,您只是将一个新数组(只有一个项目)设置为viewControllers
,这就是为什么viewControllers
最后也只有一个项目。
您需要append
将新的 VC 添加到数组中,而不是使用=
:
let tabCount = selectedViewControllersProperties.count
// ..< is safer
var viewControllers = [] // you don't seem to have declared this beforehand.
for i in 0..<tabCount {
viewControllers.append(createController(title: "\(selectedViewControllersProperties[i])".localized, imageName: "\(selectedViewControllersProperties[i])", vc: selectedViewControllers[i]))
}
你也可以这样做map
:
viewControllers = (0..<tabCount).map {
createController(title: "\(selectedViewControllersProperties[$0])".localized, imageName: "\(selectedViewControllersProperties[$0])", vc: selectedViewControllers[$0])
}
推荐阅读
- python - 对出现次数最多的唯一值的唯一值进行分组 Python
- c# - itextSharp C#中的特殊字符
- ios - NSFileManager 的 createFileAtPath 方法有时在 13.3 中返回 false。*
- json - 角度形式数据到 json 对象
- python - 在 Django RestFrameWork 中设置的模型视图中的图像水印
- javascript - 搜索功能可在仪表板的多个图表中搜索特定图表
- scala - Scala:从 Vector( tuples(Int,Int) , ...) 中删除重复的整数
- excel - 使用 selenium 进行下拉日期的 Web 表单填写自动化
- javascript - 属性“isFetching”在“从不”类型上不存在,但在对象展开时有效
- reactjs - Ionic Health Plugin unable to connect to google fit