Czy ktoś może podpowiedzieć, jak podkreślić tytuł UIButton? Mam UIButton typu niestandardowego i chcę, aby tytuł był podkreślony, ale program Interface Builder nie zapewnia żadnej opcji, aby to zrobić.
W programie Interface Builder po wybraniu opcji czcionki dla przycisku udostępnia opcję wyboru Brak, Pojedynczy, Podwójny, Kolor, ale żadna z nich nie zapewnia żadnych zmian w tytule przycisku.
Każda pomoc doceniona.
text
formatting
uibutton
RVN
źródło
źródło
Odpowiedzi:
UIUnderlinedButton.h
UIUnderlinedButton.m
źródło
drawRect
brakiem wywołania przy obracaniu. Można to rozwiązać, ustawiając przycisk tak, aby przerysował:myButton.contentMode = UIViewContentModeRedraw;
co zmusza przycisk do przerysowywania, gdy zmieniają się granice.setTitle
metodę w następujący sposób:objective-c - (void)setTitle:(NSString *)title forState:(UIControlState)state { [super setTitle:title forState:state]; [self setNeedsDisplay]; }
Aby użyć konstruktora interfejsu do podkreślenia, należy:
Wideo, które zrobił ktoś inny https://www.youtube.com/watch?v=5-ZnV3jQd9I
źródło
setTitle
z przypisanym tekstem. Dla mnie tworzenie niestandardowego przycisku do rysowania podkreślenia jest nieco egzotyczne (być może wciąż jestem nowy w iOS, nawet mając ukończoną jedną aplikację).Od iOS6 można teraz używać NSAttributedString do wykonywania podkreślania (i obsługi wszystkich innych przypisanych ciągów) w znacznie bardziej elastyczny sposób:
Uwaga: dodałem to jako kolejną odpowiedź - ponieważ jest to zupełnie inne rozwiązanie niż moje poprzednie.
Edycja: dziwnie (przynajmniej w iOS8) musisz podkreślić pierwszy znak, inaczej to nie zadziała!
aby obejść ten problem, ustaw pierwszy znak podkreślony wyraźnym kolorem!
źródło
Możesz to zrobić w samym konstruktorze interfejsu.
źródło
Jest to bardzo proste z przypisanym ciągiem
Tworzy słownik z ustawionymi atrybutami i stosuje się do przypisanego ciągu. Następnie możesz ustawić przypisany ciąg jako przypisany tytuł w uibutton lub atrybut przypisany w uilabel.
źródło
commentString
; skopiowałeś z odpowiedzi @ NickH247?Oto moja funkcja, działa w Swift 1.2.
Rozszerzenie UPDATE Swift 3.0:
źródło
Odpowiedź Nicka to świetny, szybki sposób na zrobienie tego.
Dodałem obsługę
drawRect
cieni.Odpowiedź Nicka nie bierze pod uwagę, jeśli tytuł przycisku ma cień pod tekstem:
Ale możesz przesunąć podkreślenie w dół o wysokość cienia w następujący sposób:
Wtedy otrzymasz coś takiego:
źródło
W przypadku Swift 3 można użyć następującego rozszerzenia:
źródło
źródło
Rozwijając odpowiedź autorstwa @Nick H247, napotkałem problem polegający na tym, że po pierwsze podkreślenie nie było przerysowywane, gdy rozmiar przycisku zmieniał się podczas obracania; można to rozwiązać, ustawiając przycisk tak, aby przerysował:
Zmusza to przycisk do przerysowywania, gdy zmieniają się granice.
Po drugie, oryginalny kod zakładał, że masz tylko 1 wiersz tekstu na przycisku (mój przycisk zawija się do 2 wierszy po obróceniu), a podkreślenie pojawia się tylko w ostatnim wierszu tekstu. Kod drawRect można zmodyfikować, aby najpierw obliczyć liczbę wierszy w przycisku, a następnie umieścić podkreślenie na każdym wierszu, a nie tylko na dole, na przykład:
Mam nadzieję, że ten kod pomoże komuś innemu!
źródło
Szybko
źródło
Możesz użyć tego kodu, aby dodać podkreślenie z odstępami w przycisku.
1 - odniesienie do konstruktora interfejsu
2 - za pomocą opisanego kodu
źródło
Wersja Swift 5.0, która działa od września 2019 w Xcode 10.3:
Aby go użyć, najpierw ustaw tytuł przycisku za pomocą,
button.setTitle("Button Title", for: .normal)
a następnie zadzwoń,button.underlineText()
aby ten tytuł był podkreślony.źródło
Jak sobie poradzimy ze sprawą, kiedy przytrzymamy wciśnięty przycisk podkreślony? W takim przypadku kolor tekstu przycisku zmienia się zgodnie z podświetlonym kolorem, ale linia pozostaje w oryginalnym kolorze. Powiedzmy, że jeśli kolor tekstu przycisku w stanie normalnym jest czarny, to jego podkreślenie również będzie miało kolor czarny. Podświetlony kolor przycisku jest biały. Przytrzymanie wciśniętego przycisku zmienia kolor tekstu przycisku z czarnego na biały, ale kolor podkreślenia pozostaje czarny.
źródło
Uważam, że to jakiś błąd w edytorze czcionek w XCode. Jeśli używasz konstruktora interfejsu, musisz zmienić tytuł ze zwykłego na przypisany, otwórz TextEdit, utwórz podkreślony tekst i skopiuj i wklej do pola tekstowego w XCode
źródło
Odpowiedź Nicka H247, ale szybkie podejście:
źródło
źródło
Wersja Swift 3 dla odpowiedzi @ NickH247 z niestandardowym kolorem podkreślenia, szerokością linii i odstępami:
źródło