UINavigationController и действие кнопки возврата

У меня есть два controllers 1-й self и 2-й maincontrollerгде я толкаю maincontroller в стеке, поэтому автоматически возвращается кнопка "назад".

Здесь мне нужно сделать предупреждение, когда пользователь нажимает кнопку возврата.

Как я могу это сделать?

8 ответов

Решение

Или вы можете использовать UINavigationController делегатские методы. Метод willShowViewController вызывается при нажатии кнопки "Назад" вашего ВК.

- (void)navigationController:(UINavigationController *)navigationController willShowViewController:(UIViewController *)viewController animated:(BOOL)animated;

Сначала спрячьте кнопку назад, используя

self.navigationItem.hidesBackButton = YES;

и затем создайте свою собственную пользовательскую кнопку:

UIBarButtonItem *backBtn =[[UIBarButtonItem alloc]initWithTitle:@"back" style:UIBarButtonItemStyleDone target:self action:@selector(popAlertAction:)];
self.navigationItem.leftBarButtonItem=backBtn;
[backBtn release];

и ваш селектор здесь:

- (void)popAlertAction:(UIBarButtonItem*)sender
{
    //Do ur stuff for pop up
}

Лучший и самый простой способ

Попробуйте вставить это в контроллер вида, где вы хотите обнаружить нажатие:

-(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];
}

Создайте свой собственный UIBarButtonItem и установите его как leftBarButtonItem в viewDidLoad метод mainController,

Например (здесь я использовал системный элемент, но вы также можете создать другой элемент, подробности см. В описании класса).

UIBarButtonItem *leftBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showAlertView:)];
self.navigationItem.leftBarButtonItem = leftBarButtonItem;

// only if you don't use ARC
// [leftBarButtonItem release];

где

- (void)showAlertView:(id)sender
{
    // alert view here...
}

viewControllerCount - это переменная, которая содержит количество viewController, ранее было в UINavigationController. Затем мы проверяем, если viewControllerCount > [viewControllers count], если это так, мы знаем, что мы вернемся (т.е. имитация кнопки "Назад").

- (void)navigationController:(UINavigationController *)navigationController
      willShowViewController:(UIViewController *)viewController
                    animated:(BOOL)animated
{
    NSArray *viewControllers = [navigationController viewControllers];

    if (viewControllerCount > [viewControllers count])
    {
        // your code
    }

    viewControllerCount = [viewControllers count];
}
      extension ViewController: UINavigationControllerDelegate {
// when the self != viewcontroller ,it's mean back
     func navigationController(_ navigationController: UINavigationController, willShow viewController: UIViewController, animated: Bool) {
          if self != viewController { 
             // your code
           }
}}

Добавьте пользовательскую кнопку назад с действием и установите свое оповещение в этом методе действия. Вы можете добавить свою пользовательскую кнопку назад отсюда: http://www.applausible.com/blog/?p=401

Создать кнопку и дать действие кнопки следующим образом.

[self alert];

и когда отображается предупреждение, после нажатия на да

[self.navigationController popViewController];

после этого,

self.navigationController.LeftBarButton = myButton;

это может помочь

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