2014-11-10 9 views

risposta

42

UPDATE SWIFT 3

Un esempio di come creare un UITabBarController di programmazione potrebbe essere simile a questo:

Per prima cosa creare il UIViewControllers che sarà il contenuto di ogni scheda dell'interfaccia della barra delle linguette. Per questo esempio ne creiamo solo uno molto semplice.

class Item1ViewController: UIViewController { 
    override func viewDidLoad() { 
     super.viewDidLoad() 

     view.backgroundColor = UIColor.green 
     self.title = "item1" 
     print("item 1 loaded") 
    } 
} 

Ora, il UITabBarController:

creiamo le nuove istanze della UIViewControllers che vogliamo visualizzare nella barra delle schede. Quindi creiamo un'icona per ogni istanza che abbiamo creato e quindi creiamo una matrice che contiene tutto UIViewControllers che specifica il contenuto per ogni scheda dell'interfaccia della barra delle linguette. L'ordine dei controller della vista nell'array corrisponde all'ordine di visualizzazione nella barra delle schede.

class DashboardTabBarController: UITabBarController, UITabBarControllerDelegate { 
    override func viewDidLoad() { 
     super.viewDidLoad() 
     delegate = self 
    } 

    override func viewWillAppear(_ animated: Bool) { 
     super.viewWillAppear(animated) 
     let item1 = Item1ViewController() 
     let icon1 = UITabBarItem(title: "Title", image: UIImage(named: "someImage.png"), selectedImage: UIImage(named: "otherImage.png")) 
     item1.tabBarItem = icon1 
     let controllers = [item1] //array of the root view controllers displayed by the tab bar interface 
     self.viewControllers = controllers 
    } 

    //Delegate methods 
    func tabBarController(_ tabBarController: UITabBarController, shouldSelect viewController: UIViewController) -> Bool { 
     print("Should select viewController: \(viewController.title) ?") 
     return true; 
    } 
} 
+0

Ciao! Ho fatto questo, ma quando il tabbarcontroller è caricato non evidenzia l'icona di uitabbaritem – Alexander

+0

@Alexsander aggiungi "self.selectedIndex = 0" nella parte inferiore di viewWillAppear() – Neil

+0

Anche l'aggiunta di VC in 'ViewDidLoad' funziona, mi chiedo perché hai preferito usare 'viewWillAppear'! – Husam

0

Se si utilizza lo storyboard per i viewcontrollers, è necessario scrivere in questo modo nella classe TabController.

class CustomTabbarController : UITabBarController { 

    override func viewDidLoad() { 

     super.viewDidLoad() 

     let storyboard = UIStoryboard(name: "Main", bundle: nil) 

     let firstViewController = FirstViewController() 
     let navigationController = UINavigationController(rootViewController: firstViewController) 
     navigationController.title = "First" 
     navigationController.tabBarItem.image = UIImage.init(named: "map-icon-1") 

     viewControllers = [navigationController] 

     if let secondViewController = storyboard.instantiateViewController(withIdentifier: "SecondViewController") as? SecondViewController { 

      let navgitaionController1 = UINavigationController(rootViewController: secondViewController) 
      navgitaionController1.title = "Second" 
      navgitaionController1.tabBarItem.image = UIImage.init(named: "second-icon-1") 
      var array = self.viewControllers 
      array?.append(navgitaionController1) 
      self.viewControllers = array 

     } 

    } 
}