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;
это может помочь