Назад навигация в приложении iphone - PullRequest
3 голосов
/ 06 июля 2011

Можно ли как-нибудь поймать событие, когда я нажимаю кнопку возврата в моем приложении для iPhone ?Прямо сейчас я использую кнопку с изображением «Назад» и определяю для нее действие.

Моему клиенту требуется кнопка «Назад» по умолчанию, указывающая на предыдущий экран, поэтому, основываясь на событии щелчка, я должен иметь возможность указать его на конкретныйэкран так, чтобы отображался заголовок этого экрана.

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

Заранее спасибо.

Ответы [ 4 ]

6 голосов
/ 06 июля 2011

UINavigationBarDelegate, вероятно, ближе всего вы можете определить, была ли нажата кнопка, если вы обрабатываете сообщение – navigationBar:didPopItem:.

Это будет вызвано либо при нажатии кнопки «Назад», либо когда ваш код выскочит из самого стека навигационного контроллера. Если ваш код выводит представления вручную, тогда достаточно просто установить флаг, указывающий, когда ваш код инициировал всплывающее окно, и, следовательно, вы можете определить, когда была нажата кнопка «Назад»

В вашей реализации UINavigationBarDelegate создайте логическое свойство, например poppedInCode, для которого вы установите значение true перед тем, как ваш код выполнит всплывающее окно, и реализуйте делегат, например:

- (void) navigationBar:(UINavigationBar *)navigationBar didPopItem:(UINavigationItem *)item
{
    if (!self.poppedInCode) {
        // back button was tapped
    }

    // set to false ready for the next pop
    self.poppedInCode = FALSE;
}

Это имеет преимущество перед принятым в настоящее время ответом, заключающееся в том, что он не требует создания подклассов компонентов, согласно документации Apple, что вы не должны создавать подклассы. Он также сохраняет все поведение встроенной кнопки «назад» без необходимости ее перезаписи.

3 голосов
/ 06 июля 2011

Есть два способа сделать это:

  1. Реализовать кнопку возврата самостоятельно и вызвать UINavigationController s - (UIViewController *)popViewControllerAnimated:(BOOL)animated

  2. Подкласс UINavigationController и реализуйте - (UIViewController *)popViewControllerAnimated:(BOOL)animated для выполнения обработки и передачи вызова на super.

  3. Как предлагается в другом ответе UINavigationBarDelegate, позволяет определить, является ликнопка была нажата, если вы обрабатываете сообщение – navigationBar:didPopItem:.

2 голосов
/ 06 июля 2011

Вы можете сделать свой код в методе viewWillDisappear: и установить флаг bBackClicked = true в viewWillAppear, а если вы выталкиваете любой другой контроллер из текущего контроллера представления, установите флаг bBackClicked = false.

1 голос
/ 09 октября 2012

Этот метод проще, чем другие. Одним из преимуществ этого метода является то, что вам не нужно излишне усложнять ваш код методами делегатов. Этот метод также проще реализовать, если у вас уже есть делегат для UINavigationController, поскольку он может иметь только одну ссылку на делегата за раз.

-(void)viewWillDisappear:(BOOL)animated {
    if ([self.navigationController.viewControllers indexOfObject:self] == NSNotFound) {
        // 'Back' button was pressed.  We know this is true because self is no longer
        // in the navigation stack.
    }

    [super viewWillDisappear:animated];
}
...