J'essaye de programmer des controllers de vue de mon TabBarController personnalisé:
import UIKit class TabBarViewController: UITabBarController, UITabBarControllerDelegate { var cameraViewController: UIViewController? var profileViewController: UIViewController? override func viewDidLoad() { super.viewDidLoad() self.delegate = self //self.viewControllers = [cameraViewController, profileViewController] as! [AnyObject]? let controllers: [UIViewController?] = [cameraViewController, profileViewController] self.setViewControllers(controllers as! [AnyObject], animated: true) }
Mais avec la ligne
self.viewControllers = [cameraViewController, profileViewController] as! [AnyObject]?
Je reçois une erreur que je ne peux pas convertir [UIViewController] en [AnyObject?]
et avec la ligne
self.setViewControllers(controllers as! [AnyObject], animated: true)
J'ai une erreur en disant:
Cannot invoke 'setViewControllers' with an argument list of type '([AnyObject], animated: Bool)'
Mon problème est avec AnyObject et typecasting je suppose.
Le problème est que les controllers de vue que vous essayez d'utiliser sont déclarés facultatifs:
var cameraViewController: UIViewController? var profileViewController: UIViewController?
Donc vous avez trois options:
Ne les rends pas facultatifs. Cela nécessite que vous les initialisiez avec quelque chose lorsque vous initialisez votre TabBarViewController
. Peut-être l'option la plus sûre.
Si vous savez que profileViewController
et profileViewController
ne sont jamais nil
dans viewDidLoad
:
self.viewControllers = [cameraViewController!, profileViewController!]
Vérifiez si profileViewController
et profileViewController
ne sont pas nuls dans viewDidLoad
. Cela sent mauvais design pour moi.
if let c = cameraViewController, let p = profileViewController { self.viewControllers = [c, p] }
Cela revient donc à initialiser profileViewController
et profileViewController
. Sont-ils définis avant que les controllers de vue de la barre d'tabs soient affichés? Si c'est le cas, je recommand d'append un init
personnalisé à votre class.