Problem, który mam, polega na tym, że chcę mieć możliwość zmiany textColor określonego tekstu w TextView. Używam połączonego ciągu i chcę tylko ciągów, które dołączam do tekstu TextView. Wygląda na to, że chcę użyć NSMutableAttributedString
, ale nie znajduję żadnych zasobów, jak to wykorzystać w Swift. Do tej pory mam coś takiego:
let string = "A \(stringOne) with \(stringTwo)"
var attributedString = NSMutableAttributedString(string: string)
textView.attributedText = attributedString
Stąd wiem, że muszę znaleźć zakres słów, które wymagają zmiany ich textColor, a następnie dodać je do przypisanego ciągu. Muszę wiedzieć, jak znaleźć prawidłowe ciągi z atrybutu attributeString, a następnie zmienić ich textColor.
Ponieważ mam zbyt niską ocenę, nie mogę odpowiedzieć na własne pytanie, ale oto odpowiedź, którą znalazłem
Znalazłem własną odpowiedź, tłumacząc z tłumaczenia jakiegoś kodu z
Zmień atrybuty podciągów w NSAttributedString
Oto przykład implementacji w Swift:
let string = "A \(stringOne) and \(stringTwo)"
var attributedString = NSMutableAttributedString(string:string)
let stringOneRegex = NSRegularExpression(pattern: nameString, options: nil, error: nil)
let stringOneMatches = stringOneRegex.matchesInString(longString, options: nil, range: NSMakeRange(0, attributedString.length))
for stringOneMatch in stringOneMatches {
let wordRange = stringOneMatch.rangeAtIndex(0)
attributedString.addAttribute(NSForegroundColorAttributeName, value: UIColor.nameColor(), range: wordRange)
}
textView.attributedText = attributedString
Ponieważ chcę zmienić textColor wielu ciągów, utworzę funkcję pomocniczą, aby to obsłużyć, ale to działa w przypadku zmiany textColor.
źródło
Odpowiedzi:
Widzę, że nieco odpowiedziałeś na pytanie, ale aby podać nieco bardziej zwięzły sposób bez użycia wyrażenia regularnego do odpowiedzi na pytanie tytułowe:
Aby zmienić kolor długości tekstu, musisz znać indeks początkowy i końcowy kolorowych znaków w ciągu np.
Następnie konwertujesz na przypisany ciąg i używasz `` dodaj atrybut '' z NSForegroundColorAttributeName:
Lista dalszych standardowych atrybutów, które możesz ustawić, znajduje się w dokumentacji Apple
źródło
main_string
,string_to_color
irange
nigdy nie zostały zmutowane. Rozważ zmianę ich nalet
stałe?SWIFT 5
SWIFT 4.2
źródło
Aktualizacja Swift 2.1:
self.helpText
jestUILabel
gniazdem.źródło
Swift 4.2 i Swift 5 kolorują części sznurka.
Bardzo łatwy sposób użycia NSMutableAttributedString podczas rozszerzania String. Można to również użyć do kolorowania więcej niż jednego słowa w całym ciągu.
Dodaj nowy plik do rozszerzeń, Plik -> Nowy -> Swift Plik o nazwie np. „NSAttributedString + TextColouring” i dodaj kod
Teraz możesz używać globalnie w dowolnym kontrolerze widoku:
źródło
Odpowiedź została już udzielona w poprzednich postach, ale mam inny sposób na zrobienie tego
Swift 3x:
Mam nadzieję, że to pomoże każdemu!
źródło
Odpowiedź Chrisa bardzo mi pomogła, więc zastosowałem jego podejście i zmieniłem go w funkcję, której mogę użyć ponownie. To pozwoli mi przypisać kolor do podciągu, jednocześnie nadając reszcie łańcucha inny kolor.
źródło
Swift 4.1
na przykład, jeśli chcesz zmienić czcionkę w NavBar:
źródło
Możesz użyć tego rozszerzenia, które przetestuję
szybki 4.2
źródło
Swift 2.2
źródło
.CGColor
.Najłatwiejszym sposobem na utworzenie etykiety z innym stylem, takim jak kolor, czcionka itp., Jest użycie właściwości „Attributed” w Inspektorze atrybutów. Po prostu wybierz fragment tekstu i zmień go tak, jak chcesz
źródło
Na podstawie odpowiedzi, zanim utworzyłem rozszerzenie ciągu
Możesz przekazać atrybuty tekstu do metody
Zadzwoń tak
źródło
Swift 4.1
Zmieniłem się z tego w Swift 3
I to w Swift 4.0
do Swift 4.1
Działa w porządku
źródło
szybki 4.2
źródło
Dla wszystkich, którzy szukają opcji „ Stosowanie określonego koloru do wielu słów w tekście ”, możemy to zrobić za pomocą NSRegularExpression
Link referencyjny: https://gist.github.com/aquajach/4d9398b95a748fd37e88
źródło
źródło
Dzięki tej prostej funkcji możesz przypisać tekst i zaznaczyć wybrane słowo.
Możesz także zmienić UITextView na UILabel itp.
źródło
Aby zmienić kolor czcionki, najpierw wybierz atrybut przypisany zamiast zwykłego, jak na poniższym obrazku
Następnie musisz zaznaczyć tekst w przypisanym polu, a następnie wybrać kolorowy przycisk po prawej stronie linii trasowania. To zmieni kolor.
źródło
Możesz użyć tej metody. Zaimplementowałem tę metodę w mojej wspólnej klasie narzędziowej, aby uzyskać dostęp globalny.
źródło
Jeśli używasz Swift 3x i UITextView, być może NSForegroundColorAttributeName nie zadziała (nie zadziałało dla mnie bez względu na podejście, które wypróbowałem).
Tak więc, po pewnym kopaniu, znalazłem rozwiązanie.
źródło
Super łatwy sposób na zrobienie tego.
Aby uzyskać więcej informacji, kliknij tutaj: https://github.com/iOSTechHub/AttributedString
źródło
Musisz zmienić parametry widoku tekstu, a nie parametry przypisanego ciągu
źródło
Proszę sprawdzić cocoapod Prestyler :
źródło
}
źródło
Możesz użyć jako prostego rozszerzenia
źródło