Подтвердить что ты не робот

Как вызвать метод, когда нажата кнопка возврата на UINavigationController? (IPhone)

Как я могу вызвать метод, когда нажата кнопка "Назад" на UINavigationController. Мне нужно иметь возможность вызвать метод до отображения предыдущего представления. Это возможно? Если да, пожалуйста, кто-нибудь может посоветовать, как это сделать?

4b9b3361

Ответ 1

Быстрое решение заключается в добавлении реализации метода viewWillDisappear:. Он будет запущен, как только viewController исчезнет в ответ на нажатие кнопки "Назад".

- (void)viewWillDisappear:(BOOL)animated {
  //... 
  //make you stuff here
  //... 
}

Другим решением является добавление пользовательского ответчика к кнопке "Назад". Вы можете изменить свой метод initController init следующим образом:

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

Ответ 2

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

Ответ 3

Я думаю, что нашел "чистый" способ сделать это:

Сначала установите контроллер вида в соответствии с протоколом 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;

}

Наконец, используйте этот метод из протокола UINavigationControllerDelegate:

#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;
    }
}

Ответ 4

Самый простой способ - разместить код в ViewController, который будет отображаться при нажатии кнопки "Назад". Вы можете использовать viewWillAppear

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
     //Your code here
}

Обратите внимание, что это также будет выполнено, когда представление будет представлено по любой другой причине, поэтому, если вы хотите, чтобы это произошло только при нажатии кнопки "Назад", вам необходимо использовать делегат: UINavigationControllerDelegate