mettre en évidence par programmation UIBarButtonItem
après avoir appuyé sur le "enregistrer" BarButtonItem je tiens à garder le programme en surbrillance jusqu'à ce que l'enregistrement est terminé. La mise en évidence graphique d'iOS sont de très bonne qualité, à cet effet, je tiens à rester ou de définir cet état.
Jusqu'à maintenant, j'ai trouvé 'setSelected" et "setHighlighted", mais elles ne fonctionnent pas sur un UIBarButtonItem.
Toutes les suggestions sur comment résoudre ce problème? Je vous remercie à l'avance, Koen.
source d'informationauteur Ckoeny
Vous devez vous connecter pour publier un commentaire.
setSelected
etsetHighlighted
fonctionner correctement sur UIControls, mais pas UIBarButtonItems (qui ne sont pas UIControls).Je vous recommande d'utiliser UIBarButtonItem de
- (void)setBackgroundImage:(UIImage *)backgroundImage forState:(UIControlState)état barMetrics:(UIBarMetrics)barMetrics
(documentation) la méthode pour modifier l'image d'arrière-plan à quelque chose qui imite la mise en évidence.Vous pouvez également personnaliser la UIView sur l'élément qui imite aussi mises en relief (voir la
customView
propriété).Si vous voulez absolument utiliser le graphique par défaut, vous pouvez initialiser votre bouton de l'élément que
et basculer d'
Vous aussi, vous avez besoin d'utiliser la propriété de style pour lire l'état actuel.
Si vous ajoutez un
UIBarButtonItem
avec unUIButton
sauvegarde, vous pouvez simplement demander pour le CustomView.Vous créez une sortie de ce bouton par exemple
btnMoreOut
et vous n':J'espère que cela aide..Bonne chance 🙂
1) Obtenir une référence à votre bouton de la barre.
2) à l'Aide de la propriété de style, l'affecter à UIBarButtonItemStyleDone, ou UIBarButtonItemStylePlain sur la base de certains de l'etat.
NB. Vous pouvez obtenir de l'état de diverses manières. Par exemple, à l'aide de NSUserDefaults, enregistrez une valeur de clé de paire. Tirez sur la valeur, et prenez un peu de BOOL représentation à tester. Puis écrire cette ligne:
Ou avec les valeurs par défaut de tous imbriqués comme ceci:
Sans l'opérateur ternaire:
Vous pouvez essayer ceci (Swift):
Appel setupInterface() dans le ViewDidLoad et une autre fonction dans votre code.
Si tu veux changer juste titre attributs (par exemple, le titre, la couleur), vous pouvez appeler
setTitleTextAttributes:forState:
Pour moi, ça fonctionne plus stable que
setTintColor:
(changement de teinte de la couleur des pauses durant détendez-vous segue pousser animation).p.a.'s réponsetransformé pour Xcode 9, Swift 4.
L'idée est que le
.done
de style souligne - ou gras, Swift 4 - le texte du bouton.Initialiser le bouton de l'élément de l'onu a souligné l'etat:
Basculer le bouton de point de surbrillance à l'aide d'un opérateur ternairecomme suit:
Ou, alternativement, d'activer /désactiver la mise en surbrillance de l'état avec un
if/else
déclaration comme ceci à la place:Et, d'une valeur de type boolean pour vérifier si le bouton de l'élément est mis en évidence:
Notes:
bordered
style est déconseillée dans iOS 8, j'ai donc utilisé.plain
ici à la place. Ils ont tous deux présents sur le bouton de l'élément de texte dans une est pas mis en évidence de l'état.La
#selector
fonction doit être soit un@IBAction
ou il doit être préfixé avec@objc
pour éviter "l'Objectif de C-inférence". Par exemple:ou, si vous avez connecté une action sur le bouton de l'élément:
Ces deux déclarations de fonctions de dire au compilateur qu'ils sont en Objective-C-base de la fonctionnalité. Cela est nécessaire parce que
#selector
est un Objectif-C chose sous le capot, et en Swift 4 vous devez état, plutôt que de laisser le compilateur déduire ce qui se passe comme il l'a fait précédemment.Vous pouvez utiliser deux images pour les deux états de la touche comme un état "UIControlStateNormal" vous pouvez utiliser une image pour l'état normal.
Et puis quand le bouton est pressé, l'autre image qui montre appuyé, puis l'image avec une case à l'aide de méthode isSelected de UIButton.
Espère que cela a un sens pour vous.