2016-11-23 2 views
0

I имеют структуру следовать в моем приложении:Лучший способ управления Просмотр контроллеров навигации

При первом запуске приложения, он загружает мой первоначальный контроллер представления (VC A). Затем он выполняет, если пользователь вошел в систему. Если это не так, в нем представлен другой контроллер вида (VC B).

От VC B, пользователь входит в систему, и если это уже зарегистрированный пользователь, он просто возвращается к VC A (я называю dismiss из VC B). Если это первый раз, когда пользователь входит в систему, а затем VC B вызывает последовательность других контроллеров зрения, ответственных за какой-то учебник (скажем, у нас есть последовательность VC T1, VC T2 и VC T3) один вызывает другой.

Когда VC T3 Закончен делать то, что он должен делать, он должен вернуться к VC A.

Мой вопрос в том, как наилучшим образом это сделать. В настоящее время я собираюсь создать сегу обратно к начальному контроллеру VC A непосредственно с VC T3, но есть ли какая-то проблема управления памятью на этом?

ответ

1

Лучший способом я считаю, использовать UINavigationController, который имеет методы popToViewController(viewController: UIViewController, animated: Bool) и popToRootViewController(animated: Bool) среди других

Контроллера зрения вам необходимо пройти эти методы, которые вы можете создать экземпляр из раскадровки, как этого

var yourVC = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "youVCIdentifier") 

EDIT: Извините, что забыл упомянуть, что в этом случае вам следует, конечно, добавить UINavigationController к вашему раскадровке:

Editor -> Embed in -> Navigation Controller

1

Лучше сделать это в AppDelegate

if userLogined { 
    self.window?.rootViewController = loginedController 
} else { 
    self.window?.rootViewController = notLoginedController 
} 
0

Если вы хотите установить RootViewController от везде использовать его как:

OperationQueue.main.addOperation { 
     let tabBarController = self.storyboard?.instantiateViewController(withIdentifier: "TabBarController") as! UITabBarController 
     UIApplication.shared.keyWindow?.rootViewController = tabBarController 
    } 
Смежные вопросы