2016-05-20 3 views
0

Итак, вот что. У меня есть приложение, которое представляет собой tabBarController в качестве своего контроллера корневого представления с несколькими tabItems. Так вот настройки в моем приложении делегатКак переключаться между uiViews из класса UIView

class AppDelegate: UIResponder, UIApplicationDelegate { 

    var window: UIWindow? 


    func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 

     let vc1 = VC1(nibName: "VC1", bundle: nil) 
     let vc2 = VC2(nibName: "VC2", bundle: nil) 

     let menuTabBarController = MenuTabBarController(nibName: "MenuTabBarController", bundle: nil) 
     menuTabBarController.viewControllers = [VC1,VC2] 

     window = UIWindow(frame: UIScreen.mainScreen().bounds) 
     window?.rootViewController = menuTabBarController 
     window?.makeKeyAndVisible() 

     //Setup tab bar 
     UITabBar.appearance().barTintColor = UIColor.blackColor() 

     let IMG1 = UIImage(named: "img2.png") 
     let IMG2 = UIImage(named: "img2.png") 

     VC1.tabBarItem = UITabBarItem(
     title: "View 1", 
      image: IMG1, 
      tag: 1) 
     VC2.tabBarItem = UITabBarItem(
      title: "View 2", 
      image: IMG2, 
      tag:2) 



     return true 
    } 

    func applicationWillResignActive(application: UIApplication) { 

    } 

    func applicationDidEnterBackground(application: UIApplication) { 

    } 


} 

Так заметить, у меня есть два класса UIViewController (VC1 и VC2), вложенные в menuTabBar. Теперь из класса menuTabBar, я могу легко переключаться между видами, как так

class MenuTabBarController: UITabBarController,UITabBarControllerDelegate{ 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      self.delegate = self//Set tabbarcontroller delegate 

     } 

     // UITabBarControllerDelegate 
     func tabBarController(tabBarController: UITabBarController, didSelectViewController viewController: UIViewController) { 
      tabBarController.selectedIndex = 1;//Say I wanted to transition to VC2 
     } 

    } 

Но что я в конечном счете хочу сделать это, чтобы иметь возможность переключаться между двумя UIViewControllers из другого класса, который не является UIViewController. Я пытался что-то вроде этого

class Actions(){ 
     func someFunctionThatSwitchesToVC2(){ 
      //So I create a reference to appDelegate which in turn, is supposed to reference the tab bar and switch between its child views 

      let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

      let tabBarController: UITabBarController = (appDelegate.window?.rootViewController as? UITabBarController)! 
      tabBarController.selectedIndex = 1 
     } 
    } 

Когда я бегу someFucntionThatSwitchesToVC2, я получаю эту ошибку «фатальная ошибка: индекс вне диапазона». Очевидно, я ничего не делаю правильно. Любые идеи очень оценили PS, Когда я делаю tabBarController.selectedIndex = 0, я не получаю ошибку, но ничего не происходит

ответ

0

Я думаю, что вы делаете опечатку при назначении ViewControllers. Измените эту строку:

menuTabBarController.viewControllers = [VC1,VC2] 

с ниже линии:

menuTabBarController.viewControllers = [vc1,vc2] 
+0

Apurv вы правы. Но это не проблема. Это всего лишь миниатюрная версия моего фактического кода –