Ten mnie zaskoczył.
Czy w ogóle jest możliwa zmiana koloru tła przycisku UIButton w kakao na iPhone'a? Próbowałem ustawić kolor tła, ale zmienia to tylko rogi. setBackgroundColor:
wydaje się być jedyną dostępną metodą na takie rzeczy.
[random setBackgroundColor:[UIColor blueColor]];
[random.titleLabel setBackgroundColor:[UIColor blueColor]];
objective-c
iphone
cocoa-touch
uibutton
dubbeat
źródło
źródło
Odpowiedzi:
Można to zrobić programowo, tworząc replikę:
edycja: oczywiście, musiałbyś
#import <QuartzCore/QuartzCore.h>
edycja: dla wszystkich nowych czytelników należy również rozważyć kilka opcji dodanych jako „inna możliwość”. do rozważenia.
Ponieważ jest to stara odpowiedź, zdecydowanie polecam przeczytanie komentarzy dotyczących rozwiązywania problemów
źródło
Mam inne podejście,
Ze strony CommonUIUtility,
Nie zapomnij
#import <QuartzCore/QuartzCore.h>
źródło
btFind.layer.borderWidth = 1;
setBackgroundColor:(UIColor *) forState:(UIControlState)
.Zakładam, że mówisz o UIButton z
UIButtonTypeRoundedRect
? Nie możesz zmienić tego koloru tła. Kiedy próbujesz zmienić kolor tła, zmieniasz raczej kolor prostokąta, na którym jest narysowany przycisk (co zwykle jest jasne). Więc są dwa sposoby. Albo utworzysz podklasę UIButton i nadpiszesz jej-drawRect:
metodę, albo tworzysz obrazy dla różnych stanów przycisków (co jest w porządku).Jeśli ustawisz obrazy tła w Interface Builder, powinieneś zauważyć, że IB nie obsługuje ustawiania obrazów dla wszystkich stanów, które może mieć przycisk, więc zalecam ustawienie obrazów w kodzie w następujący sposób:
Ostatnia linia pokazuje, jak ustawić obraz dla wybranego i podświetlonego stanu (tego IB nie może ustawić). Nie potrzebujesz wybranych obrazów (wiersz 4 i 6), jeśli przycisk nie potrzebuje wybranego stanu.
źródło
CGContextSetFillColorWithColor
i,CGContextFillPath
aby wypełnić narysowaną ścieżkęCGContextAddArcToPoint
.forState:(UIControlStateHighlighted | UIControlStateSelected)
Cheers.Inna możliwość:
Jednak przycisk jest kwadratowy, a nie tego chcemy. Utwórz IBOutlet z odwołaniem do tego przycisku i dodaj następujące elementy do metody viewDidLoad:
Nie zapomnij zaimportować QuartzCore.h
źródło
Podklasa UIButton i przesłonięcie metod setHighlighted i setSelected
Moja metoda darkerShade należy do takiej kategorii UIColor
źródło
Jeśli nie chcesz używać obrazów i chcesz, aby wyglądał dokładnie tak, jak styl zaokrąglonego prostokąta, spróbuj tego. Po prostu umieść UIView nad przyciskiem UIButton, z identyczną ramką i maską automatycznej zmiany rozmiaru, ustaw alfa na 0,3 i ustaw kolor tła. Następnie użyj poniższego fragmentu, aby przyciąć zaokrąglone krawędzie z kolorowego widoku nakładki. Odznacz także pole wyboru „Włączono interakcję z użytkownikiem” w IB na UIView, aby umożliwić zdarzeniom dotykowym kaskadę w dół do przycisku UIButton poniżej.
Jednym z efektów ubocznych jest to, że tekst również zostanie pokolorowany.
źródło
Inna możliwość (najlepsze i najpiękniejsze imho):
Utwórz UISegmentedControl z 2 segmentami w wymaganym kolorze tła w Interface Builder. Ustaw typ na „bar”. Następnie zmień go tak, aby miał tylko jeden segment. Kreator interfejsów nie akceptuje jednego segmentu, więc musisz to zrobić programowo.
Dlatego utwórz IBOutlet dla tego przycisku i dodaj to do viewDidLoad swojego widoku:
Teraz masz piękny błyszczący, kolorowy przycisk z określonym kolorem tła. W przypadku działań użyj zdarzenia „wartość zmieniona”.
(Znalazłem to na http://chris-software.com/index.php/2009/05/13/creating-a-nice-glass-buttons/ ). Dzięki Chris!
źródło
Cóż, jestem w 99% przekonany, że nie można tak po prostu przejść i zmienić koloru tła przycisku UIB. Zamiast tego musisz samodzielnie zmienić obrazy tła, co moim zdaniem jest uciążliwe. Jestem zdumiony, że musiałem to zrobić.
Jeśli się mylę lub jest lepszy sposób bez konieczności ustawiania obrazów tła, daj mi znać
źródło
Zgodnie z sugestią @EthanB i @karim tworzącym prostokąt wypełniony z tyłu, właśnie utworzyłem kategorię dla UIButton, aby to osiągnąć.
Wystarczy wpisać kod kategorii: https://github.com/zmonteca/UIButton-PLColor
Stosowanie:
Opcjonalne do użycia przez państwa:
źródło
Możesz także dodać CALayer do przycisku - możesz z nimi zrobić wiele rzeczy, w tym kolorową nakładkę, w tym przykładzie zastosowano zwykłą warstwę koloru, którą możesz łatwo stopniować. Należy pamiętać, że dodane warstwy zasłaniają te pod spodem
źródło
dodaj drugi cel dla
UIButton
forUIControlEventTouched
i zmieńUIButton
kolor tła. Następnie zmień go z powrotem wUIControlEventTouchUpInside
celu;źródło
Aby uzyskać profesjonalne i dobrze wyglądające przyciski, możesz sprawdzić ten niestandardowy komponent przycisków . Możesz go używać bezpośrednio w swoich widokach i widokach tabel lub zmodyfikować kod źródłowy, aby spełniał Twoje potrzeby. Mam nadzieję że to pomoże.
źródło
To nie jest tak eleganckie jak podklasa UIButton, jednak jeśli chcesz po prostu czegoś szybkiego - zrobiłem niestandardowy przycisk, a następnie obraz 1 na 1 piksel w kolorze, który chciałbym, aby przycisk był i ustawiłem tło przycisku do tego obrazu dla stanu podświetlonego - działa na moje potrzeby.
źródło
Wiem, że zadawano to dawno temu, a teraz jest nowy UIButtonTypeSystem. Ale nowsze pytania są oznaczane jako duplikaty tego pytania, więc oto moja nowsza odpowiedź w kontekście przycisku systemu iOS 7, użyj
.tintColor
właściwości.źródło
[myButton setBackgroundColor:[UIColor blueColor]]; [myButton setTitleColor:[UIColor whiteColor] forState:UIControlStateNormal];
Można zmienić w ten sposób lub przejść do Storyboard i zmienić tło w opcjach po prawej stronie.
źródło
Swift 3:
źródło