Как я могу вызвать метод, когда нажата кнопка «Назад» на UINavigationController
. Мне нужно иметь возможность вызвать метод до отображения предыдущего представления. Это возможно? Если да, пожалуйста, кто-нибудь может посоветовать, как это сделать?Как вызвать метод, когда нажата кнопка возврата на UINavigationController? (iPhone)
ответ
Быстрое решение - добавить реализацию для viewWillDisappear: метод. Он будет запущен, как только viewController исчезнет в ответ на нажатие кнопки «Назад».
- (void)viewWillDisappear:(BOOL)animated {
//...
//make you stuff here
//...
}
Другое решение - добавить пользовательский ответчик к кнопке «Назад». Вы можете изменить метод инициализации вашего ViewController как следующие:
- (id)init {
if (self = [super init]) {
//other your stuff goes here
//...
//here we customize the target and action for the backBarButtonItem
//every navigationController has one of this item automatically configured to pop back
self.navigationItem.backBarButtonItem.target = self;
self.navigationItem.backBarButtonItem.action = @selector(backButtonDidPressed:);
}
return self;
}
, а затем вы можете использовать метод выбора в качестве следующего. Не забудьте корректно удалить viewController, иначе ваш навигационный контроллер не пойдет по желанию.
- (void)backButtonDidPressed:(id)aResponder {
//do your stuff
//but don't forget to dismiss the viewcontroller
[self.navigationController popViewControllerAnimated:TRUE];
}
Самый простой способ - разместить код в ViewController, который будет отображаться при нажатии кнопки «Назад». Вы можете использовать viewWillAppear
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
//Your code here
}
Обратите внимание, что это также будет выполняться, когда вид представлен на какой-либо другой причине, так что если вы хотите, чтобы это произошло только тогда, когда кнопка назад нажата, вы должны использовать делегат: UINavigationControllerDelegate
, что метод будет вызываться, когда это появляется ВК вообще, не обязательно только в результате просто вернуться к нему – Colin
@Colin, что является правильным, это зависит от конкретного поведения он хочет, он может использовать делегат, если он только хочет, когда нажата кнопка «Назад». –
UIButton *backButton = [[UIButton alloc] initWithFrame:CGRectMake(0, 0, 52, 31)];
[backButton setBackgroundImage:[UIImage imageNamed:@"BackButton.png"] forState:UIControlStateNormal];
//[backButton setTitle:@"CLOSE" forState:UIControlStateNormal];
[backButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
[backButton.titleLabel setFont:[UIFont boldSystemFontOfSize:14.0f]];
[backButton addTarget:self action:@selector(tappedBackButton:) forControlEvents:UIControlStateHighlighted];
UIBarButtonItem* item = [[UIBarButtonItem alloc] initWithCustomView:backButton];
self.navigationItem.leftBarButtonItem = item;
[item release];
Создание пользовательской кнопки Назад и с помощью этого Селектор вызова метода, который вы хотите. А также используйте [self.navigationController popViewControllerAnimated: TRUE];
- (void)tappedBackButton:(id)button
{
// call your method here
[self.navigationController popViewControllerAnimated:TRUE];
}
Обратите внимание, что при замене кнопки «Назад» вы теряете «проведите пальцем по левому краю, чтобы вернуться к функции parentController», которая была введена в iOS 7 и является полезной ярлык на iPhone 6 и 6+ –
Это не работает с self.navigationItem.rightBarButtonItem ... Пожалуйста, дайте другое решение – Vidhi
Я думаю, что нашел «чистый» способ сделать это:
Во-первых, установить контроллер представления в соответствие с протоколом UINavigationControllerDelegate
@interface MyViewController() <UINavigationControllerDelegate>
Затем определить его в качестве делегата
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
// Set this View Controller as the navigation controller delegate
self.navigationController.delegate = self;
}
Последнее, используйте этот метод из UINavigationControllerDeleg съела протокол:
#pragma mark - Navigation controller delegate
- (void)willMoveToParentViewController:(UIViewController *)parent
{
// If there is no parent, then it means that the view controller has been removed from the stack, which happens when the back button has been pressed
if (!parent) {
NSLog(@"Back button pressed");
// it can be useful to store this into a BOOL property
self.backButtonPressed = YES;
}
}
- 1. Как вызвать метод, когда кнопка возврата в эмуляторе нажата
- 2. iPhone Dev, UINavigationController, как программировать, когда нажата кнопка «Назад»
- 3. Как вызвать метод viewDidLoad при нажатии кнопки возврата в UINavigationController? (iPhone/iPad)
- 4. Как вызвать метод, когда нажата кнопка в gridview
- 5. Кнопка возврата UINavigationController исчезает?
- 6. iPhone: кнопка UINavigationController назад
- 7. Как сказать, когда кнопка возврата нажата в UINavigationControllerStack
- 8. Когда нажата кнопка возврата панели инструментов
- 9. Кнопка возврата Java нажата
- 10. Невозможно вызвать метод, когда нажата кнопка меню HW.
- 11. Пользовательская кнопка возврата в UINavigationController
- 12. Кнопка возврата нажата в UIAlertController
- 13. UITableView Когда кнопка нажата
- 14. Flip mapView, когда кнопка нажата в iphone?
- 15. Вызов popToRootViewControllerAnimated: нажата кнопка «назад»
- 16. Ошибка: кнопка возврата в UINavigationController и потоки
- 17. Кнопка «Назад» на UINavigationController
- 18. Как получить предупреждение, когда кнопка возврата нажата в jquery?
- 19. как реализовать функцию, когда кнопка отмены нажата на возврат 0, но когда нажата кнопка возврата 1 и обновлена сетка
- 20. Когда кнопка «нажата»?
- 21. Слушайте, когда нажата кнопка
- 22. MonoDroid MVVMCross кнопка возврата назад нажата на TabHost
- 23. MP-контроллер снимает, когда нажимается кнопка, нажата на iphone
- 24. Как узнать, когда кнопка нажата на C#
- 25. iOS WatchKit - Как определить, когда кнопка «Назад» нажата на Watch?
- 26. Когда кнопка нажата +1
- 27. Как вызвать функцию кнопки, когда кнопка не нажата
- 28. JQuery: как вызвать td a, когда нажата кнопка tr.
- 29. Как я могу вызвать пользовательскую функцию, когда кнопка возврата нажата в UITextView?
- 30. Оставьте активность, когда кнопка возврата нажата во фрагменте
Одно из различий между ними состоит в том, что первое решение (то есть 'viewWillDisappear') вызывается при возврате или переходе через стек навигации. Второе решение - только для того, чтобы вернуться. – Matthew
Это обычно не работает, так как вы обнаружите, что backBarButtonItem равен нулю, если вы явно не назначили ему кнопку. Как бы то ни было, оба метода leftBarButtonItem и backBarButtonItem были равны нулю. – Diziet
не работает –