Wie wäre es möglich, sowohl fetten als auch nicht fetten Text in ein uiLabel aufzunehmen?
Ich möchte lieber kein UIWebView verwenden. Ich habe auch gelesen, dass dies möglicherweise mit NSAttributedString möglich ist, aber ich habe keine Ahnung, wie ich das verwenden soll. Irgendwelche Ideen?
Apple erreicht dies in mehreren seiner Apps. Beispiele Screenshot:
Vielen Dank! - Dom
ios
objective-c
swift
uilabel
nsattributedstring
DomMaiocchi
quelle
quelle
Antworten:
Aktualisieren
In Swift müssen wir uns nicht mit alten iOS5-Dingen befassen, außer dass die Syntax kürzer ist, damit alles wirklich einfach wird:
Swift 5
Swift 3
Verwendung:
Bonus: Internationalisierung
Einige Leute äußerten sich zur Internationalisierung. Ich persönlich denke, dass dies nicht in den Rahmen dieser Frage fällt, aber zu Unterrichtszwecken würde ich es so machen
Ergebnis (Vorausgesetzt, Englisch und Japanisch Localizable.strings sind verfügbar)
Vorherige Antwort für iOS6 und höher (Objective-C funktioniert immer noch):
In iOS6
UILabel
,UIButton
,UITextView
,UITextField
, zugeschrieben Unterstützung geben könnte, die Mittel , die wir brauchen nicht zu schaffenCATextLayer
ist , als unser Empfänger für zugeschrieben Saiten. Außerdem müssen wir nicht mehr mit CoreText spielen, um den zugewiesenen String zu erstellen :) Wir haben neue Klassen in obj-c Foundation.framework likeNSParagraphStyle
und andere Konstanten, die unser Leben einfacher machen. Yay!Also, wenn wir diese Zeichenfolge haben:
Wir müssen nur die zugeordnete Zeichenfolge erstellen:
Es gibt ein paar gute einführende Blog - Posts hier von Jungs bei invasivecode , die mit mehr Beispiele Verwendungen erklären
NSAttributedString
, sucht „Einführung in die NSAttributedString für iOS 6“ und „Zugeschrieben Strings für iOS mit Interface Builder“ :)PS: Über dem Code sollte es funktionieren, aber es wurde vom Gehirn kompiliert. Ich hoffe es ist genug :)
Alte Antwort für iOS5 und darunter
Verwenden Sie einen CATextLayer mit einem NSAttributedString! viel leichter und einfacher als 2 UILabels. (iOS 3.2 und höher)
Beispiel.
Vergessen Sie nicht, das QuartzCore-Framework (für CALayers erforderlich) und CoreText (für die zugewiesene Zeichenfolge erforderlich) hinzuzufügen.
Das folgende Beispiel fügt der Symbolleiste des Navigationscontrollers eine Unterebene hinzu. à la Mail.app im iPhone. :) :)
In diesem Beispiel habe ich nur zwei verschiedene Schriftarten (fett und normal), aber Sie können auch unterschiedliche Schriftgrößen, Farben, Kursivschrift, Unterstreichung usw. verwenden . Sehen Sie sich die Zeichenfolgenschlüssel für die Attribute NSAttributedString / NSMutableAttributedString und CoreText an .
Ich hoffe es hilft
quelle
[NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]
wird@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
.{
), keine eckigen Klammern ([
).Probieren Sie eine Kategorie auf UILabel aus:
So wird es verwendet:
Und hier ist die Kategorie
UILabel + Boldify.h
UILabel + Boldify.m
Beachten Sie, dass dies nur in iOS 6 und höher funktioniert. Es wird in iOS 5 und früher einfach ignoriert.
quelle
@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}
hättest[UIFont boldSystemFontOfSize:self.font.pointSize]
[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
Dies ist in Interface Builder ganz einfach :
1) Stellen UILabel Zugeschrieben in Attributes Inspektor
2) Wählen Sie einen Teil der Phrase aus, den Sie fett machen möchten
3) Ändern Sie die Schriftart (oder die fett gedruckte Schrift derselben Schriftart) in der Schriftartenauswahl
Das ist alles!
quelle
Es gibt eine Kategorie, die auf der Kategorie von bbrame basiert. Es funktioniert ähnlich, ermöglicht es Ihnen jedoch, dasselbe
UILabel
mehrfach mit kumulativen Ergebnissen zu fetten .UILabel + Boldify.h
UILabel + Boldify.m
Mit diesen Korrekturen können Sie es mehrmals verwenden, z.
führt mit: „ Aktualisiert: 2012.10.14 21.59 Uhr “.
quelle
Es hat bei mir funktioniert:
Für die Swift-Version: Siehe hier
quelle
Ich habe die Antwort von Crazy Yoghurt auf die Erweiterungen von Swift übernommen.
Vielleicht gibt es keine gute Konvertierung zwischen Range und NSRange, aber ich habe nichts Besseres gefunden.
quelle
boldSubstring(_:)
bisvar range = text.string.range(of: substr, options: .caseInsensitive)
zu machen Strings mit unterschiedlicher Groß- auch fett.Schauen Sie sich TTTAttributedLabel an . Es ist ein Drop-In-Ersatz für UILabel, mit dem Sie Schriftarten und Farben in einem einzelnen Etikett mischen können, indem Sie einen NSAttributedString als Text für dieses Etikett festlegen.
quelle
In diesem Fall könnten Sie versuchen,
quelle
So machen Sie Text fett und unterstreichen ihn in einem UILabel. Fügen Sie einfach die folgenden Zeilen in Ihren Code ein.
quelle
Verwenden Sie den folgenden Code. Ich hoffe es hilft dir.
quelle
Swift 4:
quelle
Hoffe, dieser wird Ihren Bedürfnissen entsprechen. Geben Sie die Zeichenfolge an, die als Eingabe verarbeitet werden soll, und geben Sie die Wörter an, die als Eingabe fett / farbig sein sollen.
Danke dir. Viel Spaß beim Codieren.
quelle
NSRange mit dem folgenden Code, den ich gerade in meinem Projekt (in Swift) implementiert habe, ist nicht erforderlich:
quelle
Wenn Sie die Verwendung von zugeordneten Zeichenfolgen vereinfachen möchten, verwenden Sie Attributed String Creator, um den Code für Sie zu generieren. https://itunes.apple.com/us/app/attributed-string-creator/id730928349
quelle