web-dev-qa-db-fra.com

Comment puis-je ajouter un badge à un bouton UIB standard?

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:

An iPhone UI button

70
ohadpr

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.

78
Dan Ray

Vous pouvez vérifier plusieurs options ici: Badges CocoaControls

7
Carlos Ricardo

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.

3
Javier Soto

Nous avons une vue de badge dans Nimbus qui est super facile à utiliser et bien documentée:

NimbusBadge

2
featherless

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

1
Björn Kaiser

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.

1
Eiko