Что-то вроде prepareForSegue, но при возвращении - PullRequest
4 голосов
/ 12 февраля 2012

В моем приложении для iOS я использую UINavigationController с настройкой сегментов в XCode. Для одного из представлений я хочу скрыть панель навигации, а для других - чтобы она появилась. Я могу успешно скрыть панель на главном экране, а затем красиво анимировать ее при переходе к следующему виду, но когда я возвращаюсь назад (используя кнопку «Назад» на панели навигации), панель просто исчезает, оставляя черный цвет. прямоугольник, затем переключается обратно на предыдущий вид. Я хотел бы быть в состоянии уловить это, с помощью чего-то вроде противоположного prepareForSegue, и приятно оживить панель навигации. Есть ли способ сделать это?

Ответы [ 2 ]

2 голосов
/ 02 ноября 2013

Там в настоящее время нет prepareForDesegue:sender: альтернативы prepareForSegue:sender:.Рекомендуемая практика - установить в пункте назначения ViewController ссылку на источник ViewController.Затем, когда пункт назначения ViewController отклоняется, он может уведомить источник ViewController о том, что он собирается снова стать вершиной ViewController.Как правило, ссылка устанавливается в prepareForSegue:sender:.

Итак, чтобы сделать этот бетон, давайте предположим, что у вас есть ViewControllerA, и вы собираетесь перейти к ViewControllerBViewControllerB вы определяете свойство, которое ссылается на ViewControllerA.(Это часто делается с использованием протоколов, но для простоты просто предположим, что ViewControllerB имеет @property ViewControllerA *delegate;.) Затем в prepareForSegue:sender: вы сделаете следующее:

ViewControllerB * vcB = (ViewControllerB *)[segue destinationViewController];
vcB.delegate = self;

Позже,в ViewControllerB, в любом коде, который собирается вернуть вас к ViewControllerA, вы будете использовать self.delegate, чтобы вернуться к ViewControllerA, и дать ему знать, что он будет представлен, и дать ему возможность сделатьвсе, что вам нужно с UINavigationBar.

0 голосов
/ 12 февраля 2012

В представлении UIViewController, в котором должна отображаться панель навигации, поместите следующие методы:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [self.navigationController setNavigationBarHidden:YES animated:animated];
}


- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];


    [self.navigationController setNavigationBarHidden:NO animated:animated];
}

Вы можете добавить некоторую логику на случай, если панель по какой-либо причине будет задерживатьсякак некоторые последующие представления все еще нуждаются в баре).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...