繁体   English   中英

从View Controller调用TabBarController委托-Swift

[英]Call TabBarController delegate from View Controller - Swift

所以我有一个基于Parse后端的iOS应用程序。 我在AppDelegate设置了UITabBarController ,它可以正常工作。

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
}

但是我的应用程序使用登录名,当用户登录时,我希望显示选项卡Bar controller。 这是我的登录视图控制器

@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);

但是,这链接到具有标识符“ navigation”的UINavigationController的方法是否可以发送在Appdelegate创建的选项卡栏控制器的情节Appdelegate或以某种方式实例化视图

开始从事类似项目。 我不知道这是否是最佳做法,但我将让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()

    }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM