Jak Mogę dodać odznakę do standardowego UIButton? [zamknięte]

Czy można dodać plakietkę standardowo wyglądającą do standardowego UIButton?

Jeśli nie jest wspierany częściowo natywnie, jaki byłby najprostszy sposób, aby to osiągnąć?

Przykładowy obrazek:

Przycisk UI iPhone ' a

Author: this.lau_, 2011-01-18

6 answers

Oto bardzo fajna Klasa autorstwa Saschy Paulus o nazwie CustomBadge , która buduje i renderuje niestandardowe odznaki za pomocą grafiki Core. Są to tylko podklasy UIView, więc układasz je używając ich ramki, tak jak każda inna podklasa UIView.

Korzystałem z tej biblioteki wiele razy i zawsze byłem zadowolony z wyników. Elastyczny, łatwy w użyciu. Zdecydowanie polecam.

 78
Author: Dan Ray,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-11-14 04:46:32

Możesz sprawdzić kilka opcji tutaj: Cocoacontrols Badges

 7
Author: Carlos Ricardo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-20 15:32:17

Klasa, której używa Apple to _UIBadgeView (https://github.com/nst/iOS-Runtime-Headers/blob/master/Frameworks/UIKit.framework/_UIBadgeView.h), ale oczywiście ta klasa jest prywatna (zwróć uwagę na podkreślenie) i nie jest udokumentowana.

Oto kolejna klasa, która implementuje ten widok z takim samym wyglądem i stylem jak Apple, jednocześnie pozwalając ci go dostosować: https://github.com/JaviSoto/JSBadgeView . wspaniałą rzeczą w tym jest to, że pozwala ustawić odznakę względem innego widoku automatycznie, w jednym z jego narożników.

 3
Author: Javier Soto,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-09-09 22:48:45

Mamy widok odznaki w Nimbus, który jest super łatwy w użyciu i dobrze udokumentowany:

NimbusBadge

 2
Author: featherless,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-19 10:48:46

Nie wiem, jak to się robi po wyjęciu z pudełka i szczerze wątpię, że Apple wbudowało to w SDK.

W każdym razie, możesz utworzyć niestandardowy widok za pomocą przycisku, dodać tło odznaki jako Widok UIImageView i umieścić na nim etykietę, aby utrzymać liczbę odznak.

Jest to szybkie rozwiązanie, może lepiej utworzyć niestandardową podklasę UIButton i dodać swoje znaczki jako subview

 1
Author: Björn Kaiser,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 15:52:44

Poszedłbym w podobny sposób jak @ Björn Kaiser: użyj przycisku, jak chcesz, a następnie Dodaj niestandardowy widok z tą plakietką jako subview do niego - zrobiłem to i działa dobrze.

Jeśli chodzi o Widok, możesz go narysować, jak chcesz. Możesz narysować go ręcznie lub użyć CoreAnimation i pozwolić mu zrobić główną część, np. theBadge.layer.cornerRadius = ...; aby nadać mu okrągły kształt, narysować tekst / numer w drawRect: lub dodać go jako etykietę itp.

 1
Author: Eiko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 20:27:25