2015-03-29 2 views
2

Итак, у меня есть приложение iOS, построенное на сервере Parse. Я установил UITabBarController в AppDelegate, и это работает правильно.Вызовите делегата TabBarController из View Controller - Swift

class AppDelegate: UIResponder, UIApplicationDelegate { 

var window: UIWindow? 
var tabBarController: UITabBarController? 
var array: [AnyObject] = [] 

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool { 
    Parse.setApplicationId("1040205491TFSDJT43T49T349F3I4T3J") 
    var navigationBarAppearance = UINavigationBar.appearance() 
    navigationBarAppearance.tintColor = uicolorFromHex(0xffffff) 
    navigationBarAppearance.barTintColor = uicolorFromHex(0x4183D7) 
    UIApplication.sharedApplication().statusBarStyle = UIStatusBarStyle.LightContent 
    let titleDict: NSDictionary = [NSForegroundColorAttributeName: UIColor.whiteColor()] 
    navigationBarAppearance.titleTextAttributes = titleDict 
    //navigationBarAppearance.clipsToBounds = true; 
    let tabBarController = UITabBarController() 
    let storyboard = UIStoryboard(name: "Storyboard", bundle: nil) 
    let myVC2 = storyboard.instantiateViewControllerWithIdentifier("navProfile") as UIViewController 
    let myVC1 = storyboard.instantiateViewControllerWithIdentifier("navigation") as UIViewController 
    let myVC3 = storyboard.instantiateViewControllerWithIdentifier("navComp") as UIViewController 
    var controllers = [myVC1,myVC3] 
    tabBarController.viewControllers = controllers 
    self.window?.rootViewController = tabBarController 
    var query = PFUser.query() 
    return true 
} 

Однако мое приложение использует логин и когда пользователь входит в систему, я хочу отобразить контроллер панели вкладок. Это мой Логин контроллер

@IBAction func SignIn(sender: AnyObject) { 
    LoginViewController().showActivityIndicator(self.view) 
    PFUser.logInWithUsernameInBackground(UsernameTextField.text,password: PasswordTextField.text){ 
     (user:PFUser!, error:NSError!)->Void in 
     if user != nil{ 
      println("Login successfull") 
      let storyboard = UIStoryboard(name: "Storyboard", bundle: nil) 
      let vc = storyboard.instantiateViewControllerWithIdentifier("navigation") as UIViewController 
      self.presentViewController(vc, animated: false, completion: nil); 

вид Однако это ссылки на UINavigationController с идентификатором «навигация» Есть ли способ отправить идентификатор раскадровки для контроллера панели вкладок, созданной в Appdelegate или каким-то образом создать экземпляр с точки зрения

+1

Если вы используете раскадровку, почему вы создаете контроллер панели вкладок и его детей в AppDelegate? Создайте их все в раскадровке. – rdelmar

+0

Мне нужно, чтобы контроллеры выбирались в соответствии с состоянием пользователя. Например, если зарегистрированный пользователь является учеником, тогда отображаются myVC1 и myVC2, если отображается его Работодатель, тогда myVC1 и 3. Этот код отсутствует выше, чтобы сделать его более понятным. – Sunny17

ответ

0

Запуск работы над аналогичным проектом. Я не знаю, является ли это лучшей практикой, но у меня будет проверка AppDelegate, если есть зарегистрированный пользователь, а затем выберите, какой вид должен быть представлен.

Основная причина такого подхода заключается в том, что если вы не можете представить представление, чей вид не находится в иерархии окон. Таким образом, у вас не будет представления, представляющего себя, а затем появится другое представление, что сделает процесс более плавным.

Надежда это служит

var user = PFUser.currentUser() 
    if user == nil { 
     // Do stuff after successful login. 
     println("Login Not Succesful") 
    } else { 
     // The login failed. Check error to see why. 
     println("Login Succesful") 
     var rootViewController = self.window!.rootViewController 
     let mainStoryboard: UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
     var viewController = mainStoryboard.instantiateViewControllerWithIdentifier("tabbc") as! UITabBarController 

     window?.rootViewController = viewController 
     window?.makeKeyAndVisible() 

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