Как я могу закрыть rootViewController перед представлением нового UITabBarController? - PullRequest
0 голосов
/ 29 мая 2019

Я установил UIViewController в качестве моего rootViewController в AppDelegate, однако, когда пользователь входит в систему или пропускает его, я представляю UITabBarController поверх.

Мне нужно отклонить LoginController и установить UITabController как rootViewController вместо того, чтобы пользователь вошел в систему.

Как я могу реорганизовать это?

AppDelegate ()

window = UIWindow()
window?.makeKeyAndVisible()
window?.rootViewController = LoginController()

LoginController ()

self.present(MainTabBarController(), animated: true, completion: nil)

Ответы [ 3 ]

1 голос
/ 29 мая 2019

Вы можете создать свой код следующим образом.

Этот

1 голос
/ 30 мая 2019

Слишком легко поддерживать условие для пользователя, вошедшего в систему или нет, а затем на основе этого статуса.Вы можете перейти к своему виду.

Вы можете попробовать это следующим образом:

1.В AppDelegate вы можете этими способами.

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
    // Override point for customization after application launch.

    let isLogin = UserDefaults.standard.bool(forKey: "IS_LOGIN")
    if isLogin == true {
        self.goToDashboardView()
    } else {
        self.goToLoginView()
    }
    return true
}

//MARK:- ------- Global Methods -------

class func sharedInstance() -> AppDelegate {
    return UIApplication.shared.delegate as! AppDelegate
}

func goToLoginView() {

    let sb = UIStoryboard.init(name: "Main", bundle: nil)
    let loginVC = sb.instantiateViewController(withIdentifier: "LoginViewController") as! LoginViewController
    let navVC = UINavigationController(rootViewController: loginVC) // You can skip this if you do not want to add navigation bar
    self.window?.rootViewController = navVC // if you skipped above line, then you have to assign 'loginVC' here.
    self.window?.makeKeyAndVisible()
}

func goToDashboardView() {

    let sb = UIStoryboard.init(name: "Main", bundle: nil)
    let tabbarVC = sb.instantiateViewController(withIdentifier: "MyTabBarController") as! MyTabBarController
    self).window?.rootViewController = tabbarVC // if you skipped above line, then you have to assign 'loginVC' here.
    self.window?.makeKeyAndVisible()
}

2.In LoginViewController, когда пользователь успешно вошел в систему.

@IBAction func btnLoginClicked(_ sender: UIButton) {

    // Your API call or other code
    // If all things goes well, then login and go to dashboard

    UserDefaults.standard.set(true, forKey: "IS_LOGIN")
    AppDelegate.sharedInstance().goToDashboardView()
}

3. И наконец, всякий раз, когда и откуда вы хотите выйти из приложения, просто позвоните ниже кода.

@IBAction func btnLogOutClicked(_ sender: UIButton) {

    // Your API call or other code
    // If all things goes well, then logout and go to login view

    UserDefaults.standard.set(false, forKey: "IS_LOGIN")
    AppDelegate.sharedInstance().goToLoginView()
}

4.И Main.storyboard должен иметь такой дизайн: TabBar in Storyboard

0 голосов
/ 29 мая 2019

вам не нужно представлять UITabBarViewController и затем закрывать LoginViewController, вам просто нужно сбросить UITabBarViewController как rootViewController для вашего приложения после входа в систему или пропустить следующее:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
self.window = UIWindow(frame: UIScreen.mainScreen().bounds)

// Override point for customization after application launch.

let yourTabBar = UIStoryboard(name: "YOUR_STORYBOARD_NAME", bundle: nil).instantiateViewController(withIdentifier: "YOUR_UITABBARCONTROLLER_ID")
self.window!.rootViewController = yourTabBar
self.window!.makeKeyAndVisible()
return true
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...