【问题标题】:How to put viewControllers into loop array?如何将 viewControllers 放入循环数组中?
【发布时间】:2020-05-10 15:18:40
【问题描述】:

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

代码如下:

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

我在这里做错了什么,请帮助我解决它。

【问题讨论】:

    标签: ios arrays uinavigationcontroller viewcontroller swift5


    【解决方案1】:

    在 for 循环的每次迭代中,您只是将一个新数组(只有一项)设置为 viewControllers,这就是为什么 viewControllers 最后也只有一项。

    您需要将append 新的VCs 加入到阵列中,而不是使用=

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

    【讨论】:

    • 但是第一个追加没有
    • @HussamDabaan 您可能声明了数组,但当时还没有显示。删除var这个词,它应该可以工作。
    • 错误:“[UIViewController] 类型的值?”没有成员“追加”
    • @HussamDabaan 在? 之前添加问号.append
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 2012-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    相关资源
    最近更新 更多