2016-01-18 2 views
1

В какой-то момент в моем приложении мне нужно вернуться к моему главному (т. Е. Дому) ViewController. Поэтому мне нужно вернуться назад в свой навигационный стек, который теперь заполнен ViewControllers и NavigationControllers. Поэтому я делаю следующее:UIApplication.sharedApplication(). KeyWindow? .rootViewController замораживает мое приложение

// to dismiss the current VC 
self.navigationController?.popViewControllerAnimated(true) 

// to go back home 
UIApplication.sharedApplication().keyWindow?.rootViewController = homeNC 

homeNC глобальная переменная, указывающая на NavigationController, содержащий раскадровку экземпляр моего основного «дома» ViewController.

Это работает, но частично. Смысл, он возвращает меня в мой домашний ViewController, но затем становится невосприимчивым к касаниям и прокрутке. Ничто не отвечает, ни кнопки навигации, ни TableViewCells внутри домашнего NC/VC. Xcode не падает, просто сидит там, ожидая.

Я не могу понять, почему. Может ли кто-нибудь подумать, что мне здесь не хватает?

** EDIT **

Может быть, это потому, что я встраивание вложенную VC внутри моего основного (дома) VC. Вот код, и что еще я пробовал так:

homeNC = self.navigationController! 
homeVC = self 

let discoverVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DiscoverVC") as UIViewController 

// embed discoverVC in this VC 
self.addChildViewController(discoverVC) 
self.view.addSubview(discoverVC.view) 
discoverVC.didMoveToParentViewController(self) 

// store self NC for using it by "thank you" VC to come back to home after payment 
let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 

// navigates back but becomes unresponsive 
appDelegate.window?.rootViewController = homeVC 

// navigates back but becomes unresponsive 
appDelegate.window?.rootViewController = homeNC 

Я также попытался сохранения ссылки на AppDelegate окно со следующим:

// Initialise sideMenu 
window = UIWindow(frame: UIScreen.mainScreen().bounds) 

let sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: MainViewController()), leftMenuViewController: LeftMenuViewController()) 

window!.rootViewController = sideMenu 
window!.makeKeyAndVisible() 

// get a reference to appdelegate's window so that we can navigate back later 
mainWindow = window! 

но опять не вернуться обратно, когда я делаю:

appDelegate.window?.rootViewController = mainWindow.rootViewController 
+0

Использование Xcode, чтобы приостановить приложение и посмотреть, что происходит в главном потоке во время замораживания. –

+0

Хмм в какой-то момент во время перехода один из журналов говорит: «Представление контроллеров вида на отдельных контроллерах просмотра не рекомендуется». Я нахожусь на iOS8, кстати, – Polis

+1

Как я уже сказал, проверьте трассировку стека. Это обычно лучше, чем гадать. :) –

ответ

1

Попробуйте это. Я буду работать на вас.

let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    appDelegate.window?.rootViewController = mainVC 

EDIT

Я прочитал ваш отредактированный вопрос. Проблема возникает из-за SSASideMenu. Я обновил свой ответ, и надеюсь, теперь он будет работать для вас. Вы должны сделать два изменения. Во-первых, в AppDelegate.swift, сделать свойство SSASideMenu так:

var window: UIWindow? 
var sideMenu: SSASideMenu! 

Теперь ваш код будет изменен на:

sideMenu = SSASideMenu(contentViewController: UINavigationController(rootViewController: MainViewController()), leftMenuViewController: LeftMenuViewController()) 

Теперь, если вы хотите изменить представление-контроллер, вы должны изменить contentViewController из SSASideMenu, как это:

func showDiscoverVC() { 
    //Instantiate ViewController 
    let discoverVC: UIViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewControllerWithIdentifier("DiscoverVC") as UIViewController 

    let appDelegate = UIApplication.sharedApplication().delegate as! AppDelegate 
    appDelegate.sideMenu.contentViewController = UINavigationController(rootViewController: discoverVC) 
} 
+0

Спасибо за предложение, но, к сожалению, это то же самое; Возвращается к homeVC, но остается невосприимчивым. – Polis

+0

@Polis: Удалите: self.navigationController? .popViewControllerAnimated (true) и вызовите метод, который я поделился с вами. –

+0

Все еще не отвечаю, я боюсь. – Polis

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