2014-11-07 3 views
0

У меня есть 2 контроллера верхнего уровня, каждый со своим собственным контроллером навигации. У меня также есть MenuViewController, который добавляется к каждому из контроллеров отображения верхнего уровня, на viewDidLoad, как это:Переключение между видами в разных навигационных контроллерах

var storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    var vc : MenuViewController = storyboard.instantiateViewControllerWithIdentifier("MenuViewController") as MenuViewController 
    addChildViewController(vc) 
    menuView.addSubview(vc.view) 
    vc.didMoveToParentViewController(self) 

В MenuViewController, вы можете переключаться между двумя контроллерами зрения верхнего уровня. В настоящее время я использую этот код для переключения между ними:

func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
    var storyboard : UIStoryboard = UIStoryboard(name: "Main", bundle: nil) 
    if indexPath.row == 0 { 
     let vc : HomeViewController = storyboard.instantiateViewControllerWithIdentifier("HomeViewController") as HomeViewController 
     let navigationController = UINavigationController(rootViewController: vc) 
     self.presentViewController(navigationController, animated: true, completion: nil) 
    } else if indexPath.row == 1 { 
     let vc : FoodCraftsViewController = storyboard.instantiateViewControllerWithIdentifier("FoodCraftsViewController") as FoodCraftsViewController 
     let navigationController = UINavigationController(rootViewController: vc) 
     self.presentViewController(navigationController, animated: true, completion: nil) 
    } 
} 

Мое беспокойство в том, что каждый раз, когда я переключаюсь между окнами с помощью меню, это выделение дополнительной памяти и не вынимая предыдущий вид из памяти. Каков эффективный способ гарантировать, что я не воссоздаю контроллеры представлений/трату памяти каждый раз, когда я переключаю представления верхнего уровня с помощью меню?

Спасибо!

ответ

0

Содержите ссылку на экземпляр HomeViewController и FoodCraftsViewController в вашем MenuViewController. Создайте его, если указатель не установлен, иначе используйте существующее значение в вашем вызове presentViewController.

+0

Это легко? Я не думал, что это сработает, потому что каждый раз, когда загружается контроллер верхнего уровня, он создает новый экземпляр MenuViewController. – codeman

+0

Сколько раз загружается ваш контроллер верхнего уровня? Возможно, я неправильно понял вашу архитектуру. Вы создаете 'MenuViewController' внутри каждого из ваших' HomeViewController' и 'FoodCraftsViewController'? –

+0

Да, я создаю экземпляр MenuViewController внутри обоих диспетчеров верхнего уровня, но оба диспетчера представлений не будут загружаться одновременно. Я делаю это из-за анимации, которую я делаю в этих диспетчерах представлений, где строка состояния скрывается, в то же время основной вид анимируется частично с экрана, показывая под ним MenuViewController. Будет ли ваш метод по-прежнему работать с предотвращением ненужного выделения/создания экземпляра? – codeman

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