iOS - Comment faire un backBarButtonItem exécuter également une fonction personnalisée?

StackOverflow https://stackoverflow.com/questions/7812974

  •  26-10-2019
  •  | 
  •  

Question

Je suis un débutant de développement iOS. Je suis en utilisant le code suivant pour définir mon backBarButtonItem -

UIBarButtonItem *temporaryBarButtonItem=[[UIBarButtonItem alloc] init];
temporaryBarButtonItem.title=@"Back";
self.navigationItem.backBarButtonItem = temporaryBarButtonItem;
[temporaryBarButtonItem release];

Je veux aussi exécuter une autre fonction, en dehors de revenir en arrière. Est-ce possible? Ou dois-je besoin d'un autre bouton pour enregistrer?

Était-ce utile?

La solution

Vous pouvez pratiquement faire dans votre viewDidDisappear ou méthode viewWillDisappear.

Si ce point de vue ne peut revenir en arrière et ne présente pas de vue, cela devrait fonctionner.

Cependant, si vous prévoyez de présenter un sous-vue, vue modale, aller plus loin dans la hiérarchie de navigation, ou faire d'autres opérations de vue qui causeront viewDidDisapper pour obtenir appelé, alors vous aurez besoin de séparer votre logique de code back-bouton en quelque sorte .

Par exemple, si vous présenterez une vue modale de ce point de vue, vous pouvez vérifier si self.modalViewController est nul, si elle est alors vous n'avez pas vue modale étant actuelle et peut exécuter le code en toute sécurité en arrière-bouton. Si ce n'est pas nul, alors vous avez une vue modal présente et ne doit pas exécuter du code back-bouton. (viewWillDisappear doit enregistrer le contrôleur modal de vue comme non nulle).

Autres conseils

Très simple, essayez ceci!

    [[UIBarButtonItem alloc] initWithTitle:@"Done" style:UIBarButtonItemStyleDone target:self action:@selector(myCoolAction:)];

Alors tout ce que vous faites est le changement myCoolAction: une méthode appropriée dans votre contrôleur de vue et de la manipuler. Amusez-vous!

EDIT: Oh, si vous voulez utiliser pour le backBarButtonItem, il ne fonctionnera pas comment vous vous attendez. Le système ne sera pas appeler vos cibles / actions pour le backBarButtonItem. Ils s'effacés une fois attribué à la backBarButtonItem.

Une façon de gérer cela est trop brancher le votre UINavigationController en tant que délégué. Ensuite, dans votre

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

Méthode que vous pouvez faire un comportement personnalisé là.

Vous pouvez ajouter UIBarButtonItem à ajouter un événement et xib gestionnaire il.

Sinon créer UIBarButtonItem avec une vue personnalisée, qui est un gestionnaire d'événements UIButton et ajouter.

A strictement parler, cela ne peut être fait avec UIKit.

Voir la documentation sur backBarButtonItem:

L'objectif et l'action du bouton de la barre arrière élément devrait être défini néant. La valeur par défaut est un élément de bouton de la barre affichant la navigation Titre de l'article.

Le travail est autour de spécifier un leftBarButtonItem et quel que soit le comportement attacher sur mesure dont vous avez besoin en attachant une cible @selector.

Le peu délicat est l'image du bouton lui-même. Comme vous le savez la valeur par défaut est pas un bouton rectangulaire. Au contraire, il a une forme de flèche côté gauche. Pour cela, vous aurez besoin de définir une image personnalisée pour que le bouton semble être la valeur par défaut.

Il y a des tonnes de ressources pour le faire là-bas, y compris celui-ci pour extraire toutes les œuvres UIKit:

https://github.com/0xced/UIKit-Artwork-Extractor

Vous devriez être capable de faire quelque chose comme ça au lieu d'utiliser viewDidDisappear ou viewWillDisappear.

Placez ce dans viewDidLoad:

self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Cancel" style:UIBarButtonItemStyleDone target:self action:@selector(cancelButtonAction:)];
self.navigationItem.leftItemsSupplementBackButton = NO;

Vous pouvez ensuite créer la méthode cancelButtonAction cancelButtonAction pour votre code personnalisé et la fonctionnalité arrière comme ceci:

- (void)cancelButtonAction:(id)sender {
    //Your custom code goes here...


    //This will perform the back functionality if using a Navigation Controller
    [self.navigationController popViewControllerAnimated:YES];
}

Remarque:. Cela va finir par l'aide d'un bouton rectangulaire, sans la flèche

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top