2015-12-17 7 views
2

Я новый программист в Swift, но у меня возникли проблемы.Контроллеры начального вида в Swift

У меня есть страница входа в систему (LoginViewController), и когда я нажимаю кнопку, она направляется в другой контроллер просмотра (MainViewController). Проблема заключается в том, что в MainViewController я использую слайд-меню из здесь: https://github.com/dekatotoro/SlideMenuControllerSwift и код, в котором делается меню слайд в 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() 


} 

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

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

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

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

+0

Не уверен, если я получу то, что происходит. не могли бы вы немного пояснить немного лучше? что такое «со всем меню».? – adolfosrs

+0

Мне нужно сначала представить LoginViewController, но поскольку createMenuView() был запущен в приложении фонда (...), он отображается как начальный контроллер представления. Поэтому я хочу, чтобы при нажатии кнопки входа в систему появился MainViewController с меню слайдов. –

ответ

3

Это происходит потому, что вы заменяете вид корневой контроллер будет 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 вызова.

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

+0

Большое спасибо i'm собираюсь попробовать :) –

+0

in appDelegate! .window?!. BackgroundColor = UIColor (красный: 236.0, зеленый: 238.0, синий: 241.0, alpha: 1.0) appDelegate! .window?!. rootViewController = slideMenuController appDelegate! .window?!. makeKeyAndVisible() У меня ошибка, и решение в соответствии с Xcode было поставить! в «appDelegate» и еще один следующий «окно». Я запустил его, и я не получил никаких ошибок, но когда я нажимаю кнопку во время входа, контроллер MainView появляется пустым. –

+0

спасибо большое! он работает :) –

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