Je veux ajouter une apparition lorsque quelqu'un appuie sur le bouton "Retour" de mon application iOS, pour demander à l'utilisateur s'il veut vraiment revenir. Ensuite, en fonction de la réponse de l'utilisateur, je voudrais annuler l'action ou continuer. J'ai essayé d'ajouter le code dans la fonction de viewwilldisappart de ma vue, puis écrivez le délégué approprié, mais cela ne fonctionne pas, car il change toujours la vue, puis montrer la fenêtre contextuelle. Mon code est:
-(void) viewWillDisappear:(BOOL)animated {
_animated = animated;
if ([self.navigationController.viewControllers indexOfObject:self]==NSNotFound) {
UIAlertView *alert_undo = [[UIAlertView alloc] initWithTitle:@"UIAlertView"
message:@"You could be loosing information with this action. Do you want to proceed?"
delegate:self
cancelButtonTitle:@"Go back"
otherButtonTitles:@"Yes", nil];
[alert_undo show];
}
else [super viewWillDisappear:animated];
}
Et la mise en œuvre des délégués est la suivante:
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
NSString *title = [alertView buttonTitleAtIndex:buttonIndex];
if([title isEqualToString:@"Yes"])
{
[super viewWillDisappear:_animated];
}
}
Cela ne fonctionne pas du tout. Quelqu'un maintenant est-il un meilleur moyen de le faire ou de ce qui pourrait être faux?
Merci beaucoup,
Merci pour votre réponse, @sticvoidman! J'ai finalement utilisé votre code avec quelques modifications. Le bouton arrière ne peut pas être modifié, il faut donc créer un bouton supplémentaire et caché la norme. Le seul problème est le style du nouveau bouton "arrière", qui n'est pas égal à celui de la norme. Le code final est:
- (void)viewDidLoad
{
self.navigationItem.hidesBackButton = YES;
UIBarButtonItem *bbtnBack = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
self.navigationItem.leftBarButtonItem = bbtnBack;
}
- (void)goBack:(UIBarButtonItem *)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"...Do you want to proceed?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(buttonIndex) {
case 0: //"No" pressed
//do something?
break;
case 1: //"Yes" pressed
//here you pop the viewController
[self.navigationController popViewControllerAnimated:YES];
break;
}
}
Une fois que -viewWillDisappear:
est appelé, il n'y a pas d'arrêt de votre viewController
de la disparition.
Vous devriez idéalement, remplacer le bouton Back navigationBar
et dans sa méthode, affichez l'alerte ( le reste étant à peu près le même) ==)
- (void)viewDidLoad
{
//...
UIBarButtonItem *bbtnBack = [[UIBarButtonItem alloc] initWithTitle:@"Back"
style:UIBarButtonItemStyleBordered
target:self
action:@selector(goBack:)];
[self.navigationItem setBackBarButtonItem: bbtnBack];
}
- (void)goBack:(UIBarButtonItem *)sender
{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Alert"
message:@"...Do you want to proceed?"
delegate:self
cancelButtonTitle:@"No"
otherButtonTitles:@"Yes", nil];
[alert show];
}
- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex
{
switch(buttonIndex) {
case 0: //"No" pressed
//do something?
break;
case 1: //"Yes" pressed
//here you pop the viewController
[self.navigationController popViewControllerAnimated:YES];
break;
}
}
[~ # ~] note [~ # ~ ~]: N'oubliez pas de déclarer <UIAlertViewDelegate>
dans le fichier . h fichier de ce viewController