Comment puis-je append un badge à un UIButton standard?

Est-il possible d'append un badge standard à un UIButton standard?

Si ce n'est pas soutenu semi-nativement, quel serait le moyen le plus simple d'y parvenir?

Exemple d'image:

Un bouton d'interface utilisateur de l'iPhone

Voici une class TRÈS NICE de Sascha Paulus appelée CustomBadge , qui construit et affiche des badges personnalisés en utilisant Core Graphics. Ce ne sont que des sous-classs UIView, donc vous les disposez en utilisant leur cadre comme n'importe quelle autre sous-class UIView.

J'ai utilisé cette bibliothèque plusieurs fois et j'ai toujours été satisfait des résultats. Flexible, facile à utiliser. Je le recommand vivement.

Vous pouvez vérifier plusieurs options ici: Badges CocoaControls

La class qu'utilise Apple est _UIBadgeView ( https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/_UIBadgeView.h ), mais bien sûr, cette class est privée (notez les souligner) et non documenté.

Voici une autre class qui implémente cette vue avec la même apparence que celle d'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 le badge par rapport à une autre vue automatiquement, dans l'un de ses coins.

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

NimbusBadge

Je ne sais pas comment cela est fait hors de la boîte et je doute honnêtement que Apple a embedded cela dans le SDK.

Quoi qu'il en soit, vous pouvez créer une vue personnalisée avec un button, append l'arrière-plan du badge en tant que UIImageView et y placer une label pour contenir le nombre de badges.

C'est une solution rapide, il vaudrait peut-être mieux créer une sous-class personnalisée de UIButton et append vos trucs de badge comme sous-vue

J'irais de la même manière que @ Björn Kaiser: Utilisez le button comme vous l'aimez, puis ajoutez une vue personnalisée avec ce badge comme sous-vue – je l'ai fait et ça fonctionne bien.

En ce qui concerne la vue, vous pouvez dessiner comme vous le souhaitez. 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 text / numéro dans drawRect: ou ajoutez-le comme une label etc.