Est-il possible d'ajouter un badge d'aspect standard à un UIButton
standard?
S'il n'est pas pris en charge de manière semi-native, quelle serait la manière la plus simple d'y parvenir?
Exemple d'image:
Voici une classe TRÈS sympa de Sascha Paulus appelée CustomBadge , qui construit et rend des badges personnalisés à l'aide de Core Graphics. Ce ne sont que des sous-classes UIView, vous pouvez donc les disposer en utilisant leur cadre comme n'importe quelle autre sous-classe UIView.
J'ai utilisé cette bibliothèque plusieurs fois et j'ai toujours été satisfait des résultats. Flexible, facile à utiliser. Je le recommande totalement.
Vous pouvez vérifier plusieurs options ici: Badges CocoaControls
La classe utilisée par Apple utilise est _UIBadgeView
( https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/_UIBadgeView.h ), mais bien sûr, cette classe est privée ( noter le trait de soulignement) et non documenté.
Voici une autre classe qui implémente cette vue avec le même aspect qu'Apple tout en vous permettant de la personnaliser: https://github.com/JaviSoto/JSBadgeView . La grande chose à propos de celui-ci est qu'il vous permet de positionner automatiquement le badge par rapport à une autre vue, dans l'un de ses coins.
Nous avons une vue de badge dans Nimbus qui est super facile à utiliser et bien documentée:
Je ne sais pas comment cela se fait hors de la boîte et je doute sincèrement que Apple a intégré cela dans le SDK.
Quoi qu'il en soit, vous pouvez créer une vue personnalisée avec un bouton dessus, ajouter l'arrière-plan du badge en tant que UIImageView et placer une étiquette dessus pour contenir le nombre de badges.
C'est une solution rapide, il pourrait être préférable de créer une sous-classe personnalisée de UIButton
et d'ajouter vos éléments de badge en tant que sous-vue
J'irais de la même manière que @ Björn Kaiser: utilisez le bouton comme vous l'aimez, puis ajoutez une vue personnalisée avec ce badge comme sous-vue - je l'ai fait et cela fonctionne bien.
Quant à la vue, vous pouvez la dessiner à votre guise. Vous pouvez le dessiner manuellement ou utiliser CoreAnimation et le laisser faire la partie principale, c'est-à-dire theBadge.layer.cornerRadius = ...;
pour lui donner une forme ronde, dessinez le texte/numéro dans drawRect:
ou ajoutez-le comme étiquette, etc.