Начальный вид контроллеров в Swift

Я новичок в Swift, но у меня есть некоторые проблемы.

У меня есть страница входа (LoginViewController), и когда я нажимаю кнопку, она направляется к другому View Controller (MainViewController). Проблема в том, что в MainViewController я использую меню слайдов отсюда: https://github.com/dekatotoro/Slide MenuControllerSwift а код, в котором выполняется меню слайдов, находится в AppDelegate:

private func createMenuView() {

    // create viewController code...
    let storyboard = UIStoryboard(name: "Main", bundle: nil)


    let mainViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController") as! MainViewController
    let leftViewController = storyboard.instantiateViewControllerWithIdentifier("LeftViewController") as! LeftViewController
    let rightViewController = storyboard.instantiateViewControllerWithIdentifier("RightViewController") as! RightViewController

    let nvc: UINavigationController = UINavigationController(rootViewController: mainViewController)

    UINavigationBar.appearance().tintColor = UIColor(hex: "689F38")

    leftViewController.mainViewController = nvc

    let slideMenuController = ExSlideMenuController(mainViewController:nvc, leftMenuViewController: leftViewController, rightMenuViewController: rightViewController)
    slideMenuController.automaticallyAdjustsScrollViewInsets = true
    self.window?.backgroundColor = UIColor(red: 236.0, green: 238.0, blue: 241.0, alpha: 1.0)
    self.window?.rootViewController = slideMenuController
    self.window?.makeKeyAndVisible()


}

и в этом приложении функция create MenuView называется:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
    self.createMenuView()
    return true
}

проблема в том, что LoginViewController является начальным контроллером представления, и когда я оставляю его таким, MainViewController появляется как начальный контроллер представления.

Как я могу сделать так, чтобы LoginViewController был начальным, и когда пользователь нажимает кнопку входа в систему, установите MainViewController со всеми пунктами меню.

Пожалуйста, помогите мне, я действительно не знаю, что делать:(

1 ответ

Решение

Это потому, что вы заменяете корневой контроллер вида на slideMenuController в методе createMenuView и вызываете его в didFinishLaunchingWithOptions в приложении делегат. Этот код будет выполнен, как только приложение будет запущено.

Решение. Вместо этого попробуйте получить экземпляр делегата приложения, используя UIApplication.sharedApplication().delegate в методе createMenuView определите этот метод в LoginViewController, а затем вызовите этот метод после нажатия кнопки в LoginViewController (где бы вы ни хотели вызвать). Пожалуйста, вызовите метод createMenuView() после нажатия кнопки в контроллере представления входа в систему, может быть в ViewWillAppear mainViewController.

Перепишите этот метод внутри LoginViewController или там, где вы хотите, чтобы он основывался на ваших требованиях:

private func createMenuView() {
    // create viewController code...
    let storyboard = UIStoryboard(name: "Main", bundle: nil)
    let mainViewController = storyboard.instantiateViewControllerWithIdentifier("MainViewController") as! MainViewController
    let leftViewController = storyboard.instantiateViewControllerWithIdentifier("LeftViewController") as! LeftViewController
    let rightViewController = storyboard.instantiateViewControllerWithIdentifier("RightViewController") as! RightViewController
    let nvc: UINavigationController = UINavigationController(rootViewController: mainViewController)
    UINavigationBar.appearance().tintColor = UIColor(hex: "689F38")
    leftViewController.mainViewController = nvc
    let slideMenuController = ExSlideMenuController(mainViewController:nvc, leftMenuViewController: leftViewController, rightMenuViewController: rightViewController)
    slideMenuController.automaticallyAdjustsScrollViewInsets = true
    let appDelegate = UIApplication.sharedApplication().delegate
    appDelegate.window?.backgroundColor = UIColor(red: 236.0, green: 238.0, blue: 241.0, alpha: 1.0)
    appDelegate.window?.rootViewController = slideMenuController
    appDelegate.window?.makeKeyAndVisible()
}

Вызовите этот метод для @IBAction кнопки входа в систему в LoginViewController.

Я надеюсь, что это ответит на ваш вопрос.

Другие вопросы по тегам