ios - 如何将 viewControllers 放入循环数组中?

标签 ios arrays uinavigationcontroller viewcontroller swift5

我正在尝试使用自定义选项卡 viewController,用户可以在其中按照他/她喜欢的方式添加/重新排列它们。在下面的代码中,我只需要返回数组计数并显示数组项,我设法通过数组的数量来完成,但是当将它用作单个数组代码时,它只显示一个 View Controller !

代码如下:

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 将只有一项最后也是。

您需要将新的 VCappend 到数组,而不是使用 =:

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])
}

关于ios - 如何将 viewControllers 放入循环数组中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59894022/

相关文章:

ios - 更改名称后 iPad 停止响应 bonjour/zeroconf

ios - 如何在Axe DevTools中添加全局标签(证明)

ios - 未安装的内部 Testflight 构建卡在 90%

ios - 使用单个导航栏从嵌入式 UISplitViewController 返回导航

objective-c - UIViewController 知道它是被推送还是弹出?

iOS:从导航堆栈中删除 View Controller

iphone - 如何初始化这个继承自 UIButton 的自定义类?

java - 没有初始大小的字符串数组给出空指针异常

c - 冒泡排序在c中不能正确排序数组

python - 如何管理 python 线程结果?