Знайте, что ViewController появляется из-за увольнения (не segue)

Я пытаюсь понять, как получить класс, который только что закрылся, внутри моего rootViewController. У меня есть несколько вариантов отклонения обратно к моему rootViewController, и мне нужно знать, пришел ли он из одного экземпляра, чтобы соответственно изменить немного пользовательского интерфейса.

Я ищу что-то похожее на [self presentingViewController] за исключением случаев, когда viewController появляется из-за увольнения, а не из-за перехода. Есть ли встроенный метод для этого?

2 ответа

Решение

Я в основном исправил эту проблему, отслеживая, посещаю ли я хотя бы один контроллер представления, от которого меня беспокоило увольнение. Таким образом, я просто устанавливаю свойство в viewController, прежде чем приступить к работе, так что я уже знаю, когда вернусь, что мне нужно позаботиться об изменениях пользовательского интерфейса. Спасибо за комментарии на раскручивающиеся сегы. Я определенно буду реализовывать их в будущем очень скоро!

Обновить

Все в этом ответе - старые новости - начиная с XCode 4.5 мы можем использовать сегменты раскручивания, чтобы вернуться к любому предыдущему viewController и запустить метод перемотки в этом контроллере. (спасибо @rdelmar)

Для чего нужны сегменты Unwind и как вы их используете?


старый способ / способ кода.. который в идеале включает делегатов для реализации конкретных методов

Когда класс отклоняет себя, вы не можете захватить его, потому что он... отклонен. Вы должны иметь его до того, как он будет уволен, а затем знать об увольнении.

Если немного поработать над этим, классы обычно не отстраняются, а их владеют сами. Обфусцирующим методом здесь может быть метод UIViewController:

- (void) dismissViewControllerAnimated:

что является сокращением для

- (void) [[self presentingViewController] dismissViewControllerAnimated:completion:nil]

Представляющий viewController имеет свойство presentedViewController который держится за тот уволенный объект - пока он не уволен. Когда presentingViewController закрывается, он сбрасывает presentedViewController собственность на ноль. Но у вас всегда есть возможность скопировать эту ссылку в другое (сильное / сохраненное) свойство до события опроса и после его запроса.

Чтобы процитировать яблоко:

"Если вы хотите сохранить ссылку на представленный контроллер представления получателя, получите значение в свойстве presentViewController перед вызовом [ dismissViewControllerAnimated: завершение: ].".

Другие вопросы по тегам