J'ai créé une barre d'outils dans IB avec plusieurs boutons. Je voudrais pouvoir masquer / afficher l'un des boutons en fonction de l'état des données dans la fenêtre principale.
UIBarButtonItem
n'a pas de propriété cachée, et tous les exemples que j'ai trouvés jusqu'à présent pour les masquer impliquent de définir les boutons de la barre de navigation sur zéro, ce que je ne pense pas que je veux faire ici parce que je devrai peut-être afficher à nouveau le bouton (pas de mentionner que, si je connecte mon bouton à un IBOutlet, si je le mets à zéro, je ne sais pas comment je le récupérerai).
ios
uibarbuttonitem
uitoolbar
Sasha
la source
la source
Réponses:
Enregistrez votre bouton dans une prise solide (appelons-le
myButton
) et faites-le pour l'ajouter / le supprimer:Parce qu'il est stocké dans la prise, vous en garderez une référence même lorsqu'il n'est pas dans la barre d'outils.
la source
Je sais que cette réponse est en retard pour cette question. Cependant, cela pourrait aider si quelqu'un d'autre fait face à une situation similaire.
Dans iOS 7, pour masquer un élément de bouton de barre, nous pouvons utiliser les deux techniques suivantes: -
SetTitleTextAttributes
: - Cela fonctionne très bien sur les éléments de bouton de barre comme "Terminé", "Enregistrer" etc. Cependant, cela ne fonctionne pas sur les éléments comme Ajouter, Symbole de corbeille, etc. (du moins pas pour moi) car ce ne sont pas des textes.TintColor
: - Si j'ai un élément de bouton de barre appelé "deleteButton": -Pour masquer le bouton, j'ai utilisé le code suivant: -
Pour afficher à nouveau le bouton, j'ai utilisé le code suivant: -
la source
deleteButton.enabled = false; deleteButton.tintColor = UIColor.clearColor()
pour désactiver et masquer, etdeleteButton.enabled = true; deleteButton.tintColor = nil
pour réactiver et afficher comme d'habitude.UIColor.clear
pourUIControlState.disabled
et d' afficher / masquer le bouton avecsetEnabled
. Bien sûr, comme vous l'avez dit, cela ne fonctionne que pour les boutons de texte.Voici une approche simple:
Je viens de l'exécuter sur mon iPad rétine, et .01 est assez petit pour qu'il ne s'affiche pas.
la source
self.window?.tintColor = APP_PRIMARY_COLOR
dans appdelegate, cela ne fonctionnera pasIl est possible de masquer un bouton en place sans modifier sa largeur ou le retirer de la barre. Si vous définissez le style en clair, supprimez le titre et désactivez le bouton, il disparaîtra. Pour le restaurer, inversez simplement vos modifications.
la source
Voici ma solution bien que je la cherchais pour la barre de navigation.
Ici "navBar" est un IBOutlet à la NavigationBar dans la vue en XIB Ici, je voulais cacher le bouton ou l'afficher en fonction d'une condition. Donc, je teste la condition dans "If" et si true, je définis le bouton sur nil dans la méthode viewDidLoad de la vue cible.
Cela peut ne pas être exactement lié à votre problème, mais quelque chose de similaire dans le cas où vous souhaitez masquer les boutons sur la barre de navigation
la source
rightBarButtonItem
nouveau ultérieurement , assurez-vous que l'élément de bouton est stocké dans une IBOutlet solide afin qu'il ne soit pas libéré lorsque vous le retirez de la barre de navigation.Pour Swift 3 et Swift 4, vous pouvez le faire pour masquer
UIBarButtomItem
:Et pour montrer
UIBarButtonItem
:Sur le,
tintColor
vous devez avoir à spécifier la couleur d'origine que vous utilisez pour leUIBarButtomItem
la source
J'utilise actuellement OS X Yosemite Developer Preview 7 et Xcode 6 beta 6 ciblant iOS 7.1 et la solution suivante fonctionne bien pour moi:
UINavigationItem
etUIBarButtonItem
sExécutez le code suivant pour supprimer
Exécutez les codes suivants pour ajouter à nouveau des boutons
la source
J'ai utilisé IBOutlets dans mon projet. Donc ma solution était:
Et lorsque vous devrez à nouveau afficher cette barre, définissez simplement les propriétés inversées.
Dans Swift 3,
enable
utilisez plutôt laisEnable
propriété.la source
self.dismissButton.customView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 0, 0)];
la source
iOS 8. UIBarButtonItem avec image personnalisée. J'ai essayé de nombreuses façons différentes, la plupart d'entre elles n'aidaient pas. La solution de Max
setTintColor
ne changeait en aucune couleur. J'ai compris celui-ci moi-même, pensant qu'il serait utile à quelqu'un.Pour se cacher:
Pour montrer:
la source
Essayez dans Swift , ne mettez pas à jour
tintColor
si vous avez un design pour votre UIBarButtonItem comme la taille de la police dans AppDelegate, cela changera totalement l'apparence de votre bouton lors de votre apparition.Dans le cas d'un bouton texte, le changement de titre peut faire disparaître votre bouton.
la source
J'ai découvert une autre ride dans l' approche
tintColor
etisEnabled
suggérée par Max et d'autres - lorsque VoiceOver est activé pour l'accessibilité et que le bouton est logiquement caché, le curseur d'accessibilité se concentrera toujours sur le bouton de la barre et indiquera qu'il est "grisé" (c'est-à-dire parce qu'ilisEnabled
est défini sur false). L'approche dans la réponse acceptée ne souffre pas de cet effet secondaire, mais un autre travail que j'ai trouvé consistait à définir la valeurisAccessibilityElement
false lors du "masquage" du bouton:Et puis
isAccessibilityElement
revenir à true lorsque vous "montrez" le bouton:Le fait que l'élément du bouton de barre occupe toujours de l'espace n'était pas un problème dans mon cas, car nous masquions / montrions la partie la plus à gauche des éléments de bouton de barre de droite.
la source
Et maintenant, changez simplement la
isHidden
propriété.la source
Amélioration de la réponse de @lnafziger
Enregistrez vos Barbuttons dans une prise solide et faites-le pour le cacher / le montrer:
Lorsque nécessaire, utilisez la fonction ci-dessous.
la source
Il suffit de définir
barButton.customView = UIView()
et de voir l'astucela source
Il n'y a aucun moyen de "masquer" un UIBarButtonItem, vous devez le supprimer de la superView et l'ajouter à nouveau lorsque vous souhaitez l'afficher à nouveau.
la source
C'est loin dans la liste des réponses, mais juste au cas où quelqu'un voudrait un copier-coller facile pour la solution rapide, le voici
la source
Une façon de le faire est d'utiliser la
initWithCustomView:(UIView *)
propriété de lors de l'allocation du fichierUIBarButtonItem
. La sous-classe pourUIView
aura la propriété hide / unhide.Par exemple:
1. Ayez un fichier
UIButton
que vous souhaitez masquer / afficher.2. Créez la
UIButton
vue personnalisée. Comme :3. Vous pouvez masquer / afficher le fichier que
myButton
vous avez créé.[myButton setHidden:YES];
la source
Pour la version Swift, voici le code:
Pour
UINavigationBar
:la source
Définir la couleur du texte sur une couleur claire lorsque l'élément de bouton de barre est désactivé est probablement une option plus propre. Il n'y a aucune bizarrerie que vous devez expliquer dans un commentaire. De plus, vous ne détruisez pas le bouton, vous conservez donc toutes les séquences de storyboard associées.
Ensuite, lorsque vous voulez que l'élément du bouton de barre soit masqué, vous pouvez simplement faire:
C'est boiteux, il n'y a pas de propriété cachée mais cela offre le même résultat.
la source
Dans le cas où UIBarButtonItem a une image au lieu du texte, vous pouvez le faire pour le masquer:
navigationBar.topItem.rightBarButtonItem.customView.alpha = 0.0;
la source
Quelques méthodes d'assistance que je pensais partager en fonction de la réponse acceptée par lnafziger car j'ai plusieurs barres d'outils et plusieurs boutons dans chacune:
la source
Vous pouvez facilement obtenir la vue et la masquer de cette façon
la source
Si vous utilisez Swift 3
la source
Voici une extension qui va gérer cela.
USAGE:
la source
En complément de la réponse d'Eli Burke, si vous avez
UIBarButtonItem
une image d'arrière-plan au lieu d'un titre, vous pouvez utiliser le code:la source
Vous devez manipuler le tableau toolbar.items.
Voici un code que j'utilise pour masquer et afficher un bouton Terminé. Si votre bouton est sur le bord extrême de la barre d'outils ou entre d'autres boutons, vos autres boutons se déplaceront, donc si vous voulez que votre bouton disparaisse, placez-le comme dernier bouton vers le centre. J'anime le déplacement du bouton pour l'effet, j'aime bien.
}
maintenant vous pouvez utiliser le code suivant pour afficher votre bouton
ou pour cacher votre bouton
la source
Dans IB, si vous laissez le titre du bouton vide, il n'apparaîtra pas (jamais initialisé?). Je le fais souvent pendant le développement pendant les mises à jour de l'interface utilisateur si je veux qu'un élément de bouton de barre disparaisse temporairement pour une génération sans le supprimer et mettre à la corbeille toutes ses références de sortie.
Cela n'a pas le même effet pendant l'exécution, si vous définissez le titre du bouton sur zéro, le bouton entier ne disparaîtra pas. Désolé ne répond pas vraiment à votre question, mais peut être utile à certains.
Edit: cette astuce ne fonctionne que si le style du bouton est défini sur plain
la source
J'ajouterai ma solution ici car je ne la trouve pas encore mentionnée ici. J'ai un bouton dynamique dont l'image dépend de l'état d'un contrôle. La solution la plus simple pour moi était de régler l'image sur
nil
si le contrôle n'était pas présent. L'image a été mise à jour à chaque mise à jour du contrôle et donc, c'était optimal pour moi. Juste pour être sûr que je l'ai également régléenabled
surNO
.La définition de la largeur sur une valeur minimale n'a pas fonctionné sur iOS 7.
la source
Avec crédit à @lnafziger, @MindSpiker, @vishal, et. Al,
La doublure la plus simple à laquelle je suis arrivé pour un seul bouton de barre droite (ou gauche) est:
Un péché:
J'ai testé cela et cela fonctionne pour moi (avec l'élément de bouton de barre robuste câblé via IB).
la source