i Définir une image personnalisée arrow dans la barre de navigation en ajoutant le code suivant dans l'application délégué, cela fonctionne mais je cherche maintenant à supprimer le texte complètement pour le bouton arrière.
UIImage * backButtonImage = [UIImage imageNamed: @"BackButtonGrey.png"]; backButtonImage = [backButtonImage stretchableImageWithLeftCapWidth: 15.0 topCapHeight: 30.0]; [[UIBarButtonItem appearance] setBackButtonBackgroundImage: backButtonImage forState: UIControlStateNormal barMetrics: UIBarMetricsDefault];
8 Réponses :
Je viens de le faire comme ça, a fonctionné bien pour moi: -)
UIImage *backButtonImage = [UIImage imageNamed:@"navigationBarBack.png"]; UIButton *backButton = [UIButton buttonWithType:UIButtonTypeCustom]; [backButton setImage:backButtonImage forState:UIControlStateNormal]; backButton.frame = CGRectMake(0, 0, backButtonImage.size.width, backButtonImage.size.height); [backButton addTarget:self action:@selector(popViewController) forControlEvents:UIControlEventTouchUpInside]; UIBarButtonItem *backBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:backButton]; self.navigationItem.leftBarButtonItem = backBarButtonItem;
Je voulais essayer de le faire dans l'application déléguée afin de changer globalement au lieu de coller ce code sur chaque classe de contrôleur.
Vous pouvez sous-classer UIViewController, ajouter le code là-bas et utiliser cette classe pour vos contrôleurs.
MH OK .. Double vérifié, semble que ça ne fonctionne pas de cette façon. Désolé pour ça .. alors je pense que vous devriez aller à la manière de sous-classement.
Comment allais-je faire ce sous-classement?
J'ai utilisé une catégorie, où je mets une méthode avec le code de ma réponse et je l'ai simplement appelé dans chaque contrôleur, où je voulais utiliser le bouton de retour personnalisé .. Si vous utilisez une sous-classe, vous ne ferez que créer un héritage. De UIViewController, mettez ce code dans la vue ViewDidLoad. Créez votre autre ViewController pour hériter de cette vueController et appelez [Super ViewDidLoad] dans ViewDiDload (que vous devriez faire quand même).
Cependant, cela désactivera le geste de balayage du dos dans iOS 7
Ne pas utiliser le proxy d'apparence. Au lieu de cela, pour chaque contrôleur d'affichage em>, mettez ce code dans son qui causera le EM> View Controller a poussé sur la pile de navigation pour avoir un bouton arrière composé de l'image. p> (Cependant, je dois souligner que ViewDidloadload CODE> Mise en œuvre:
extensibleImageWithLeftCapAidth: ... code> est obsolète. Vous devriez utiliser
resizableImage ... code>.) P> p>
Ensuite, vous n'avez pas fait ce que j'ai dit. J'utilise ce code et mon bouton arrière est bien.
J'ai essayé d'utiliser votre code mais je finis avec le même bouton arrière et rien de coutume
Lisez ma réponse plus attentivement. Si vous avez ce code dans View Controller A, vous verrez que le bouton arrière pas i> dans la vue du contrôleur A Vue de contrôleur, mais dans la vue du contrôleur B lorsque l'affichage du contrôleur B est poussé sur View Controller A.
Déplacez simplement le texte verticalement jusqu'à présent qu'il n'apparaît plus. Cela peut être fait au lancement de l'application dans votre délégué de votre application. Normalement, cet appel est destiné à modifier la position de texte verticale pouvant varier en fonction de la police utilisée. Ici, le texte est déplacé suffisamment loin de ce qu'il ne soit plus à l'intérieur de la vue du bouton arrière, puis est coupé dans la non-existence. P> P>
Pour autant que j'ai vécu cela ne fait rien avec le décalage du titre des contrôleurs de la vue actuelle.
YUP d'accord @ Ronny-André Bendiksen - Cela entraînera toujours des titres de longs titres qui ont l'air bizarre
[[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UIOffsetMake(-100.f, 0) forBarMetrics:UIBarMetricsDefault];
UIOFFSETMAKE (-100.F, 0) Ce n'est pas bon du tout - si vous allez venir dans ce contrôleur d'affichage par Push Standard, vous verrez le texte déplacé lors de l'animation. Mieux pourrait être par exemple: Uioffsettamake (-100.f, -5000.f)
Je ne pense vraiment pas que ce soit une bonne pratique pour un développeur d'ajuster le décalage du texte afin de le masquer.
Une solution plus propre serait d'ajouter à la touche Back Controller de navigation Un nouveau bouton où Le titre est une chaîne vide. Vous devez ajouter ceci dans le contrôleur d'affichage d'appel précédent dans la fenêtreWillappear (pas l'actuel): p>
C'est la seule réponse qui a fini par travailler pour moi. Assurez-vous de faire attention à Vous devez ajouter ceci dans le contrôleur de la vue précédente d'appel i>!
C'est la meilleure réponse!
UIBarButtonItem *newBackButton = [[UIBarButtonItem alloc] initWithTitle:@"" style:UIBarButtonItemStylePlain target:nil action:nil]; [[self navigationItem] setBackBarButtonItem:newBackButton];
solution parfaite globalement
Pour définir un texte Backbutton, vous définissez un nouveau backbutton sur la vue CurrentController avant de pousser ou de présenter une nouvelle nouvelle qui montrerait le texte du backbutton:
dans votre mode de vue actuel (pas le nouveau qui va montrer le Bouton arrière): p> Donc, si vous souhaitez supprimer le texte, utilisez simplement Pour définir une icône Backbutton pour l'ensemble de l'application, utilisez le code suivant dans votre classe Appdelegate. Toutes les icônes ne s'intègrent pas parfaitement, donc si vous devez le déplacer un peu, vous pouvez utiliser les "Backinsets". Dans mon exemple, l'icône déplacera 2px vers le bas. P> testé avec iOS9 P> P> @ "" code> comme titre pour le nouveau backbutton. < / P>
Sinon, vous pouvez mettre Self.navigentItem.backBarbuttonitem = .... dans votre méthode de configuration / viewDidDidLoad sur votre mode de vue actuel qui en pousse le nouveau.