Использование нескольких цветов шрифта в одной метке
есть ли способ использовать два или даже три цвета шрифта в одной метке в iOS?
Если бы в качестве примера был использован текст "hello, how are you", то" hello "было бы синим, а" how are you " - зеленым?
возможно ли это, кажется проще, чем создание нескольких меток?
13 ответов:
прежде всего инициализировать вас NSString и NSMutableAttributedString как ниже.
var myString:NSString = "I AM KIRIT MODI" var myMutableString = NSMutableAttributedString()
на ViewDidLoad
override func viewDidLoad() { myMutableString = NSMutableAttributedString(string: myString, attributes: [NSFontAttributeName:UIFont(name: "Georgia", size: 18.0)!]) myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4)) // set label Attribute labName.attributedText = myMutableString super.viewDidLoad() }
**выход: **
НЕСКОЛЬКО ЦВЕТОВ
добавьте код строки ниже в ViewDidLoad, чтобы получить несколько цветов в строке.
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.greenColor(), range: NSRange(location:10,length:5))
множественный выход цвета
Для @Hems Moradiya
let attrs1 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.greenColor()] let attrs2 = [NSFontAttributeName : UIFont.boldSystemFontOfSize(18), NSForegroundColorAttributeName : UIColor.whiteColor()] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.appendAttributedString(attributedString2) self.lblText.attributedText = attributedString1
Swift 4
let attrs1 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.green] let attrs2 = [NSAttributedStringKey.font : UIFont.boldSystemFont(ofSize: 18), NSAttributedStringKey.foregroundColor : UIColor.white] let attributedString1 = NSMutableAttributedString(string:"Drive", attributes:attrs1) let attributedString2 = NSMutableAttributedString(string:"safe", attributes:attrs2) attributedString1.append(attributedString2) self.lblText.attributedText = attributedString1
обновленный ответ для Swift 4
вы можете легко использовать html внутри attributedText свойство UILabel легко сделать различные форматирования текста.
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
обновленный ответ для Swift 2
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" let encodedData = htmlString.dataUsingEncoding(NSUTF8StringEncoding)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
Swift 4
используя следующую функцию расширения, вы можете напрямую установить атрибут цвета в строку атрибутов и применить его к своей метке.
extension NSMutableAttributedString { func setColorForText(textForAttribute: String, withColor color: UIColor) { let range: NSRange = self.mutableString.range(of: textForAttribute, options: .caseInsensitive) // Swift 4.2 and above self.addAttribute(NSAttributedString.Key.foregroundColor, value: color, range: range) // Swift 4.1 and below self.addAttribute(NSAttributedStringKey.foregroundColor, value: color, range: range) } }
попробуйте над расширением, используя метку:
let label = UILabel() label.frame = CGRect(x: 60, y: 100, width: 260, height: 50) let stringValue = "stackoverflow" let attributedString: NSMutableAttributedString = NSMutableAttributedString(string: stringValue) attributedString.setColorForText(textForAttribute: "stack", withColor: UIColor.black) attributedString.setColorForText(textForAttribute: "over", withColor: UIColor.orange) attributedString.setColorForText(textForAttribute: "flow", withColor: UIColor.red) label.font = UIFont.boldSystemFont(ofSize: 40) label.attributedText = attributedString self.view.addSubview(label)
результат:
используется rakeshbsответ на создание расширения в Swift 2:
// StringExtension.swift import UIKit import Foundation extension String { var attributedStringFromHtml: NSAttributedString? { do { return try NSAttributedString(data: self.dataUsingEncoding(NSUTF8StringEncoding)!, options: [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType], documentAttributes: nil) } catch _ { print("Cannot create attributed String") } return nil } }
использование:
let htmlString = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>" label.attributedText = htmlString.attributedStringFromHtml
или даже -е
label.attributedText = "<font color=\"red\">This is </font> <font color=\"blue\"> some text!</font>".attributedStringFromHtml
хорошая вещь о расширении является то, что вы будете иметь для всех
String
s на протяжении всего вашего приложения.
использовать
NSMutableAttributedString
myMutableString.addAttribute(NSForegroundColorAttributeName, value: UIColor.redColor(), range: NSRange(location:2,length:4))
подробнее swift-using-attributed-strings
Swift 3.0
let myMutableString = NSMutableAttributedString( string: "your desired text", attributes: [:]) myMutableString.addAttribute( NSForegroundColorAttributeName, value: UIColor.blue, range: NSRange( location:6, length:7))
для большего количества цветов вы можете просто продолжать добавлять атрибуты к изменяемой строке. Больше примеров здесь.
Мне так понравилось
let yourAttributes = [NSForegroundColorAttributeName: UIColor.black, NSFontAttributeName: UIFont.systemFontOfSize(15)] let yourOtherAttributes = [NSForegroundColorAttributeName: UIColor.red, NSFontAttributeName: UIFont.systemFontOfSize(25)] let partOne = NSMutableAttributedString(string: "This is an example ", attributes: yourAttributes) let partTwo = NSMutableAttributedString(string: "for the combination of Attributed String!", attributes: yourOtherAttributes) let combination = NSMutableAttributedString() combination.appendAttributedString(partOne) combination.appendAttributedString(partTwo)
SWIFT 3
в моем коде я создаю расширение
import UIKit import Foundation extension UILabel { func setDifferentColor(string: String, location: Int, length: Int){ let attText = NSMutableAttributedString(string: string) attText.addAttribute(NSForegroundColorAttributeName, value: UIColor.blueApp, range: NSRange(location:5,length:4)) attributedText = attText } }
и этого для использования
override func viewDidLoad() { super.viewDidLoad() titleLabel.setDifferentColor(string: titleLabel.text!, location: 5, length: 4) }
Swift 3 Пример использования HTML-версии.
let encodedData = htmlString.data(using: String.Encoding.utf8)! let attributedOptions = [NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType] do { let attributedString = try NSAttributedString(data: encodedData, options: attributedOptions, documentAttributes: nil) label.attributedText = attributedString } catch _ { print("Cannot create attributed String") }
вот код, который поддерживает последняя версия Swift как и в марте 2017 года.
Swift 3.0
здесь я создал вспомогательный класс и метод для
public class Helper { static func GetAttributedText(inputText:String, location:Int,length:Int) -> NSMutableAttributedString { let attributedText = NSMutableAttributedString(string: inputText, attributes: [NSFontAttributeName:UIFont(name: "Merriweather", size: 15.0)!]) attributedText.addAttribute(NSForegroundColorAttributeName, value: UIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0) , range: NSRange(location:location,length:length)) return attributedText } }
в параметрах метода , inputText:String-ваш текст, который будет отображаться в метке location:Int-где стиль должен быть application, "0" как начало строки или некоторое допустимое значение как символьная позиция строки длина: Int-от места до как многие персонажи этот стиль применим.
потребление в другом методе:
self.dateLabel?.attributedText = Helper.GetAttributedText(inputText: "Date : " + (self.myModel?.eventDate)!, location:0, length: 6)
выход:
Примечание: цвет пользовательского интерфейса может быть определен как
UIColor.red
или определенные пользователем цвета какUIColor(red: 0.401107, green: 0.352791, blue: 0.503067, alpha: 1.0)
func MultiStringColor(first:String,second:String) -> NSAttributedString { let MyString1 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.PUREBLACK] let MyString2 = [NSFontAttributeName : FontSet.MonsRegular(size: 14), NSForegroundColorAttributeName : FoodConstant.GREENCOLOR] let attributedString1 = NSMutableAttributedString(string:first, attributes:MyString1) let attributedString2 = NSMutableAttributedString(string:second, attributes:MyString2) MyString1.append(MyString2) return MyString1 }
для использования этого NSForegroundColorAttributeName в swift более низкой версии вы можете получить нерешенные проблемы с идентификатором изменить выше на NSAttributedStringKey.цвет переднего плана.
swift lower version swift latest version
т. е. NSForegroundColorAttributeName ==NSAttributedStringKey.цвет переднего плана