Навигационная кнопка «Назад» Элемент Событие в приложении iPhone - PullRequest
2 голосов
/ 04 июня 2010

Я работаю над приложением для iPhone.Приложение имеет панель навигации вверху.У меня есть два представления сказать «View1» и «View2».Когда вы нажимаете контроллер вида «View2», на панели навигации отображается кнопка «Назад» с заголовком «View1», чтобы вы могли вернуться к view1.

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

Любая помощь будет принята с благодарностью?

Спасибо

Ответы [ 2 ]

5 голосов
/ 04 июня 2010

Нет конкретного события, которое вы можете получить только за эту кнопку назад. Вместо этого вы можете использовать различные методы viewWillAppear:, viewWillDisappear: и т. Д. например:

//In View2:
- (void) viewWillDisappear:(BOOL) animated {
    [super viewWillDisappear:animated];
    if (!goingToSubscreen) {
        //Do something important here
    }
    goingToSubscreen = NO;
}

//In View1:
- (void) viewWillAppear:(BOOL) animated {
    [super viewWillAppear:animated];
    if (wentToSubscreen) {
        //Do something important here
    }
    wentToSubscreen = NO;
}

Обратите внимание, что логические значения GoToSubscreen и GoingToSubscreen должны быть заданы как именованные. Если вы выдвигаете другой вид на контроллер навигации в верхней части View2, вам следует установить значение GoToSubscreen в YES, чтобы оно не выполняло важные действия. И наоборот, вы должны установить GoToSubscreen в значение YES на View1 после нажатия View2, чтобы при его повторном появлении происходило что-то интересное, а не при появлении View1.

Edit: Начиная с iOS 5.0, я считаю, есть встроенные свойства для этого. isBeingDismissed устанавливается на YES во время viewWillDisappear: и viewDidDisappear: в случае, если вы нажимаете кнопку возврата. Для справки, свойства, которые вы можете проверить:

isMovingFromParentViewController
isMovingToParentViewController
isBeingPresented
isBeingDismissed

Что касается изменения заголовка кнопки «Назад», свойство принадлежит элементу кнопки «Назад» предыдущего представления:

View1.navigationItem.backBarButtonItem.title = @"My New Title";

или

View1.navigationItem.backBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleBordered target:nil action:nil] autorelease];

Третий вариант - использовать пользовательскую кнопку для замены кнопки «назад». Это позволит вам указать свой собственный метод для вызова, поэтому вам не нужно использовать -viewWillDisappear:, но при этом кнопка будет отображаться в виде прямоугольника, а не кнопки со стрелкой назад. Эта кнопка переходит на View2 вместо View1:

View2.navigationItem.leftBarButtonItem = [[[UIBarButtonItem alloc] initWithTitle:@"New Title" style:UIBarButtonItemStyleDone target:self action:@selector(dismissView)] autorelease];
0 голосов
/ 05 мая 2011

Я использую это решение для контроллера представления хоппинга.

// In some view controller
- (void) viewDidDisappear:(BOOL)animated
{
    if (self.navigationController == nil) {
        // popped from navigation stack.
        // do something...
    }
}

Но он не подключается, если контроллеры представления, помещенные поверх self, вызовут popToViewController: animated: с контроллером ниже self в стеке или popToRootViewController: animated:

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