Как поместить viewControllers в массив l oop? - PullRequest
0 голосов
/ 24 января 2020

Я пытаюсь использовать настраиваемую вкладку 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])]
}

Что я сделал не так здесь, пожалуйста помогите мне решить это.

1 Ответ

1 голос
/ 24 января 2020

В каждой итерации для l oop вы просто устанавливаете новый массив (только с одним элементом) на 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])
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...