2014-11-10 5 views
15

Как создать программно вкладки из любого класса, предоставленного UIViewController:Как добавить вкладки программно в UITabBarController с быстрым?

class DashboardTabBarController: UITabBarController { 

    override func viewDidLoad() { 
     //here 

    } 
... 

} 
+0

Вы смотрели на [документации] (https://developer.apple.com/library/ios/documentation/uikit/reference/uitabbarcontroller_class/index.html)? –

ответ

42

UPDATE СВИФТ 3

Одним из примеров того, как создать UITabBarController программно может быть таким:

Сначала мы создайте UIViewControllers, который будет содержимым для каждой вкладки интерфейса панели вкладок. Для этого примера мы создаем только одно очень простое.

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

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

Теперь UITabBarController:

Мы создаем новые экземпляры UIViewControllers, что мы хотим, чтобы отобразить на панели вкладок. Затем мы создаем значок для каждого созданного нами экземпляра, а затем создаем массив, содержащий все UIViewControllers, которые определяют содержимое каждой вкладки интерфейса панели вкладок. Порядок контроллеров представления в массиве соответствует порядку отображения на панели вкладок.

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

Привет! Я сделал это так, но когда загружен tabbarcontroller, он не выделяет значок uitabbaritem – Alexander

+0

@Alexsander добавляет «self.selectedIndex = 0» в нижней части viewWillAppear() – Neil

+0

Добавление VC в 'ViewDidLoad' также работает, интересно, почему вы предпочли использовать 'viewWillAppear'! – Husam

0

Если вы используете раскадровку для viewcontrollers, тогда вам нужно написать вот так в своем классе tabbarcontroller.

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 

     } 

    } 
} 
Смежные вопросы