Kann jemand vorschlagen, wie man den Titel eines UIButton unterstreicht? Ich habe einen UIButton vom Typ Benutzerdefiniert und möchte, dass der Titel unterstrichen wird, aber der Interface Builder bietet keine Option dazu.
Wenn Sie im Interface Builder die Schriftartoption für eine Schaltfläche auswählen, können Sie die Option Keine, Einzel, Doppel, Farbe auswählen. Bei keiner dieser Optionen werden jedoch Änderungen am Titel auf der Schaltfläche vorgenommen.
Jede Hilfe geschätzt.
text
formatting
uibutton
RVN
quelle
quelle
Antworten:
UIUnderlinedButton.h
UIUnderlinedButton.m
quelle
drawRect
weil sie beim Drehen nicht aufgerufen wurde. Dies kann gelöst werden, indem Sie Ihre Schaltfläche so einstellen, dass sie neu gezeichnet wird. Dadurch wird die Schaltfläche gezwungenmyButton.contentMode = UIViewContentModeRedraw;
, neu zu zeichnen, wenn sich die Grenzen ändern.setTitle
Methode auch folgendermaßen überschreiben :objective-c - (void)setTitle:(NSString *)title forState:(UIControlState)state { [super setTitle:title forState:state]; [self setNeedsDisplay]; }
Um den Interface Builder zum Unterstreichen zu verwenden, muss man:
Video, das jemand anderes gemacht hat https://www.youtube.com/watch?v=5-ZnV3jQd9I
quelle
setTitle
mit zugeordnetem Text verwenden. Für mich ist das Erstellen einer benutzerdefinierten Schaltfläche zum Unterstreichen etwas exotisch (möglicherweise bin ich noch neu in iOS, selbst wenn eine App abgeschlossen ist).Ab iOS6 ist es jetzt möglich, einen NSAttributedString zu verwenden, um das Unterstreichen (und alles andere, was Zeichenfolgen unterstützen) auf viel flexiblere Weise auszuführen:
Hinweis: Dies wurde als weitere Antwort hinzugefügt - da es eine völlig andere Lösung als meine vorherige ist.
Bearbeiten: Seltsamerweise (zumindest in iOS8) müssen Sie das erste Zeichen unterstreichen, sonst funktioniert es nicht!
Um dieses Problem zu umgehen, setzen Sie das erste Zeichen mit klarer Farbe unterstrichen!
quelle
Sie können dies im Interface Builder selbst tun.
quelle
Es ist sehr einfach mit zugeschriebener Zeichenfolge
Erstellt ein Wörterbuch mit festgelegten Attributen und wird auf die zugewiesene Zeichenfolge angewendet. Anschließend können Sie die zugewiesene Zeichenfolge in uibutton als attibutedtitle oder in uilabel als attributedtext festlegen.
quelle
commentString
; Hast du aus der Antwort von @ NickH247 kopiert?Hier ist meine Funktion, funktioniert in Swift 1.2.
UPDATE Swift 3.0 Erweiterung:
quelle
Nicks Antwort ist eine großartige und schnelle Möglichkeit, dies zu tun.
Ich habe Unterstützung
drawRect
für Schatten hinzugefügt .Nicks Antwort berücksichtigt nicht, ob Ihr Schaltflächentitel einen Schatten unter dem Text hat:
Sie können die Unterstreichung jedoch wie folgt um die Höhe des Schattens nach unten verschieben:
Dann bekommst du so etwas:
quelle
Für Swift 3 kann die folgende Erweiterung verwendet werden:
quelle
quelle
Bei der Erweiterung der Antwort von @Nick H247 trat ein Problem auf, bei dem zunächst die Unterstreichung nicht neu gezeichnet wurde, wenn die Größe der Schaltfläche beim Drehen geändert wurde. Dies kann gelöst werden, indem Sie Ihre Schaltfläche so einstellen, dass sie wie folgt neu gezeichnet wird:
Dies zwingt die Schaltfläche zum Neuzeichnen, wenn sich die Grenzen ändern.
Zweitens ging der ursprüngliche Code davon aus, dass Sie nur 1 Textzeile in der Schaltfläche hatten (meine Schaltfläche wird beim Drehen in 2 Zeilen umgebrochen), und die Unterstreichung wird nur in der letzten Textzeile angezeigt. Der drawRect-Code kann geändert werden, um zuerst die Anzahl der Zeilen in der Schaltfläche zu berechnen und dann jede Zeile und nicht nur die untere Zeile zu unterstreichen:
Hoffe, dieser Code hilft jemand anderem!
quelle
In kurzer Zeit
quelle
Mit diesem Code können Sie eine Unterstreichung mit einem Abstand in der Schaltfläche hinzufügen.
1 - Referenz zum Interface Builder
2 - unter Verwendung des beschriebenen Codes
quelle
Die Swift 5.0-Version, die ab September 2019 in Xcode 10.3 funktioniert:
Um es zu verwenden, setzen Sie zuerst Ihren Schaltflächentitel mit
button.setTitle("Button Title", for: .normal)
und rufen Sie dannbutton.underlineText()
auf, um diesen Titel zu unterstreichen.quelle
Wie wird man mit dem Fall umgehen, wenn wir einen unterstrichenen Knopf gedrückt halten? In diesem Fall ändert sich die Textfarbe der Schaltfläche entsprechend der hervorgehobenen Farbe, aber die Linie bleibt in der Originalfarbe. Angenommen, wenn die Textfarbe der Schaltfläche im Normalzustand schwarz ist, hat ihre Unterstreichung auch eine schwarze Farbe. Die hervorgehobene Farbe der Schaltfläche ist weiß. Wenn Sie die Taste gedrückt halten, wird die Textfarbe der Schaltfläche von Schwarz in Weiß geändert, die Unterstreichungsfarbe bleibt jedoch schwarz.
quelle
Ich glaube, es ist ein Fehler im Schrifteditor in XCode. Wenn Sie den Interface Builder verwenden, müssen Sie den Titel von "Einfach" in "Attributiert" ändern, TextEdit öffnen, unterstrichenen Text erstellen und in das Textfeld in XCode kopieren und einfügen
quelle
Antwort von Nick H247, aber schneller Ansatz:
quelle
quelle
Swift 3-Version für die Antwort von @ NickH247 mit benutzerdefinierter Unterstreichungsfarbe, Linienbreite und Lücke:
quelle