Jak można umieścić pogrubiony i niepogrubiony tekst w uiLabel?
Wolałbym nie używać UIWebView. Przeczytałem również, że może to być możliwe przy użyciu NSAttributString, ale nie mam pojęcia, jak z tego korzystać. Jakieś pomysły?
Apple osiąga to w kilku swoich aplikacjach; Przykłady Zrzut ekranu:
Dzięki! - Dom
ios
objective-c
swift
uilabel
nsattributedstring
DomMaiocchi
źródło
źródło
Odpowiedzi:
Aktualizacja
W Swift nie mamy do czynienia ze starymi rzeczami na iOS5, poza tym, że składnia jest krótsza, więc wszystko staje się naprawdę proste:
Szybki 5
Szybki 3
Stosowanie:
Bonus: internacjonalizacja
Niektóre osoby komentowały internacjonalizację. Osobiście uważam, że to nie wchodzi w zakres tego pytania, ale dla celów instruktażowych tak bym to zrobił
Wynik (przy założeniu, że lokalizowalne ciągi w języku angielskim i japońskim są dostępne)
Poprzednia odpowiedź na iOS6 i nowsze wersje (Objective-C nadal działa):
W iOS6
UILabel
,UIButton
,UITextView
,UITextField
, wsparcie nadana ciągi co oznacza, że nie ma potrzeby tworzeniaCATextLayer
s jako naszego odbiorcy do przypisywanych łańcuchów. Co więcej, aby przypisany ciąg nie był już potrzebny do zabawy z CoreTextem :) Mamy nowe klasy w obj-c Foundation.framework jakNSParagraphStyle
i inne stałe, które ułatwią nam życie. Tak!Więc jeśli mamy ten ciąg:
Musimy tylko utworzyć przypisany ciąg:
Jest kilka dobrych wprowadzających blogu tutaj z chłopakami na invasivecode że tłumaczyć z innych przykładów zastosowań
NSAttributedString
, poszukaj „Wstęp do NSAttributedString dla iOS 6” i „przypisywanego ciągów dla iOS za pomocą interfejsu Builder” :)PS: Powyższy kod powinien działać, ale został skompilowany w mózgu. Mam nadzieję, że to wystarczy :)
Stara odpowiedź dla iOS5 i niższych
Użyj CATextLayer z NSAttributString! znacznie lżejsze i prostsze niż 2 etykiety UIL. (iOS 3.2 i nowszy)
Przykład.
Nie zapomnij dodać frameworka QuartzCore (potrzebnego do CALayers) i CoreText (potrzebnego do przypisanego ciągu).
Poniższy przykład doda podwarstwę do paska narzędzi kontrolera nawigacyjnego. à la Mail.app na iPhonie. :)
W tym przykładzie mam tylko dwa różne typy czcionek (pogrubiona i normalna), ale możesz również mieć inny rozmiar czcionki, inny kolor, kursywę, podkreślenie itp. Spójrz na klucze ciągów atrybutów NSAttributString / NSMutableAttributString i CoreText .
Mam nadzieję, że to pomoże
źródło
[NSDictionary dictionaryWithObjectsAndKeys: boldFont, NSFontAttributeName, foregroundColor, NSForegroundColorAttributeName, nil]
staje się@{ NSFontAttributeName: boldFont, NSForegroundColorAttributeName: foregroundColor }
.{
), a nie nawiasów kwadratowych ([
).Wypróbuj kategorię na UILabel:
Oto jak jest używany:
A oto kategoria
UILabel + Boldify.h
UILabel + Boldify.m
Pamiętaj, że będzie to działać tylko w systemie iOS 6 i nowszych. Zostanie po prostu zignorowany w iOS 5 i wcześniejszych.
źródło
@{NSFontAttributeName:[UIFont boldSystemFontOfSize:self.font.pointSize]}
Poprosiłem[UIFont boldSystemFontOfSize:self.font.pointSize]
TO[UIFont fontWithName:self.font.fontName size:self.font.pointSize]
Łatwo to zrobić w Konstruktorze interfejsów :
1) stanowią UILabel przypisane w atrybutów Inspektor
2) wybierz fragment frazy, który chcesz pogrubić
3) zmień czcionkę (lub pogrubioną czcionkę tej samej czcionki) w selektorze czcionek
To wszystko!
źródło
Istnieje kategoria oparta na kategorii bbrame. Działa podobnie, ale umożliwia
UILabel
wielokrotne pogrubienie tego samego wyniku łącznie.UILabel + Boldify.h
UILabel + Boldify.m
Dzięki tym poprawkom możesz używać go wiele razy, np .:
spowoduje: „ Zaktualizowano: 14.10.2012 21:59 ”.
źródło
To działało dla mnie:
Wersja Swift: patrz tutaj
źródło
Przyjąłem odpowiedź Szalonego Jogurtu na rozszerzenia swift.
Być może nie ma dobrej konwersji między Range a NSRange, ale nie znalazłem nic lepszego.
źródło
boldSubstring(_:)
abyvar range = text.string.range(of: substr, options: .caseInsensitive)
pogrubione były również łańcuchy o różnej wielkości liter.Sprawdź TTTAttributLabel . Jest to drop-in zamiennik dla UILabel, który pozwala mieszać czcionkę i kolory w jednej etykiecie, ustawiając NSAttributString jako tekst dla tej etykiety.
źródło
W takim przypadku możesz spróbować
źródło
Aby tekst był pogrubiony, a także podkreślony w UILabel. Po prostu dodaj następujące wiersze do swojego kodu.
źródło
Użyj poniższego kodu. Mam nadzieję, że ci to pomoże.
źródło
Swift 4:
źródło
Mam nadzieję, że ten spełni twoje potrzeby. Podaj ciąg do przetworzenia jako dane wejściowe i podaj słowa, które powinny być pogrubione / pokolorowane jako dane wejściowe.
Dziękuję Ci. Happy Coding.
źródło
Nie ma potrzeby NSRange z następującym kodem, który właśnie zaimplementowałem w moim projekcie (w Swift):
źródło
Jeśli chcesz ułatwić korzystanie z ciągów atrybutów, spróbuj użyć narzędzia Creator String Creator, które wygeneruje kod za Ciebie. https://itunes.apple.com/us/app/attribut-string-creator/id730928349
źródło