2016-07-29 1 views
0

У меня есть контроллер iOS View, который может отображаться либо из SourceViewController, либо в результате нажатия на «< Назад» на панели навигации.Узнайте, появился ли UIViewController из-за обратной навигации

Как узнать, появился ли ViewController в результате нажатия пользователем/касания " < Back " на панели навигации.

+0

Не получаю ваш вопрос правильно! – Lion

+0

вы должны написать метод на viewDidAppear, чтобы проверить, является ли текущий UIVIewController последним контроллером в представлении свойств. Контроллеры навигацииController –

+0

@MohsenShakiba - это хорошая идея, но вам все равно нужно учитывать начальный показ контроллера вида. – Losiowaty

ответ

1

viewDidLoad не будет вызываться при навигации по назад, поэтому вы можете установить там какой-то флаг и сбросить его в соответствующем месте (возможно, viewDidAppear?). Что касается, если viewDidLoad будет вызываться каждый раз, когда вы его открываете от SourceViewController, зависит от вашего кода - если вы каждый раз создаете новый экземпляр, все должно быть в порядке.

Как для примера:

class SampleViewController : UIViewController { 
    var isOpenedFromBackNavigation = false 

    override func viewDidLoad() { 
     super.viewDidLoad() 
    } 

    override func viewDidAppear(animated: Bool) { 
     super.viewDidAppear(animated) 
     if self.isOpenedFromBackNavigation { 
      // code that should be run if we navigated back here 
     } 
     self.isOpenedFromBackNavigation = true 
    } 
} 
+0

Я думаю, что 'viewDidAppear' также будет вызывать первую загрузку после' viewDidLoad'? http://stackoverflow.com/questions/11254697/difference-between-viewdidload-and-viewdidappear – xmhafiz

+0

Да, поэтому мы используем флаг, чтобы указать, был ли показан контроллер вида. – Losiowaty

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