Как получить доступ к значениям статического выпадающего в asp.net mvc

Этот ответ обновлен для Swift 4.0.

Краткий справочник

общая форма для создания и установки атрибутной строки такова. Вы можете найти другие общие варианты ниже.

// create attributed string
let myString = "Swift Attributed String"
let myAttribute = [ NSAttributedStringKey.foregroundColor: UIColor.blue ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute) 

// set attributed text on a UILabel
myLabel.attributedText = myAttrString

let myAttribute = [ NSAttributedStringKey.foregroundColor: UIColor.blue ]

let myAttribute = [ NSAttributedStringKey.backgroundColor: UIColor.yellow ]

let myAttribute = [ NSAttributedStringKey.font: UIFont(name: "Chalkduster", size: 18.0)! ]

let myAttribute = [ NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleSingle.rawValue ]

let myShadow = NSShadow()
myShadow.shadowBlurRadius = 3
myShadow.shadowOffset = CGSize(width: 3, height: 3)
myShadow.shadowColor = UIColor.gray

let myAttribute = [ NSAttributedStringKey.shadow: myShadow ]

Остальная часть этого сообщения дает более подробную информацию для тех, кто интересуется.


Атрибуты

Атрибуты String - это просто словарь в форме [NSAttributedStringKey: Any], где NSAttributedStringKey - это ключевое имя атрибута, а Any - значение некоторого типа. Значение может быть шрифтом, цветом, целым числом или чем-то еще. В Swift есть много стандартных атрибутов, которые уже были предопределены. Например:

  • имя ключа: NSAttributedStringKey.font, значение: a UIFont
  • имя клавиши: NSAttributedStringKey.foregroundColor, значение: a UIColor
  • имя ключа: NSAttributedStringKey.link, значение: a NSURL или String

Есть много других. См. эту ссылку для получения дополнительной информации. Вы можете даже создавать свои собственные пользовательские атрибуты, такие как:

  • имя ключа: NSAttributedStringKey.myName, значение: некоторый тип. если вы создаете расширение :
    extension NSAttributedStringKey {
        static let myName = NSAttributedStringKey(rawValue: "myCustomAttributeKey")
    }
    

Создание атрибутов в Swift

Вы можете объявлять атрибуты так же, как объявление любого другого словаря.

// single attributes declared one at a time
let singleAttribute1 = [ NSAttributedStringKey.foregroundColor: UIColor.green ]
let singleAttribute2 = [ NSAttributedStringKey.backgroundColor: UIColor.yellow ]
let singleAttribute3 = [ NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleDouble.rawValue ]

// multiple attributes declared at once
let multipleAttributes: [NSAttributedStringKey : Any] = [
    NSAttributedStringKey.foregroundColor: UIColor.green,
    NSAttributedStringKey.backgroundColor: UIColor.yellow,
    NSAttributedStringKey.underlineStyle: NSUnderlineStyle.styleDouble.rawValue ]

// custom attribute
let customAttribute = [ NSAttributedStringKey.myName: "Some value" ]

Обратите внимание на rawValue, который был необходим для значения стиля подчеркивания.

Поскольку атрибуты - это просто словари, вы также можете создавать их, создавая пустой словарь, а затем добавляя ключ -значные пары. Если значение будет содержать несколько типов, тогда вы должны использовать Any в качестве типа. Вот пример multipleAttributes сверху, воссозданный таким образом:

var multipleAttributes = [NSAttributedStringKey : Any]()
multipleAttributes[NSAttributedStringKey.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedStringKey.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedStringKey.underlineStyle] = NSUnderlineStyle.styleDouble.rawValue

Attributed Strings

Теперь, когда вы понимаете атрибуты, вы можете создавать атрибутные строки.

Инициализация

Существует несколько способов создания атрибутированных строк. Если вам просто нужна строка только для чтения, вы можете использовать NSAttributedString. Вот несколько способов его инициализации:

// Initialize with a string only
let attrString1 = NSAttributedString(string: "Hello.")

// Initialize with a string and inline attribute(s)
let attrString2 = NSAttributedString(string: "Hello.", attributes: [NSAttributedStringKey.myName: "A value"])

// Initialize with a string and separately declared attribute(s)
let myAttributes1 = [ NSAttributedStringKey.foregroundColor: UIColor.green ]
let attrString3 = NSAttributedString(string: "Hello.", attributes: myAttributes1)

Если вам нужно будет изменить атрибуты или строковое содержимое позже, вы должны использовать NSMutableAttributedString. Объявления очень похожи:

// Create a blank attributed string
let mutableAttrString1 = NSMutableAttributedString()

// Initialize with a string only
let mutableAttrString2 = NSMutableAttributedString(string: "Hello.")

// Initialize with a string and inline attribute(s)
let mutableAttrString3 = NSMutableAttributedString(string: "Hello.", attributes: [NSAttributedStringKey.myName: "A value"])

// Initialize with a string and separately declared attribute(s)
let myAttributes2 = [ NSAttributedStringKey.foregroundColor: UIColor.green ]
let mutableAttrString4 = NSMutableAttributedString(string: "Hello.", attributes: myAttributes2)

Изменение атрибутивной строки

В качестве примера давайте создадим строку с атрибутом вверху этого сообщения.

Сначала создайте NSMutableAttributedString с новым атрибутом шрифта.

let myAttribute = [ NSAttributedStringKey.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myString = NSMutableAttributedString(string: "Swift", attributes: myAttribute )

Если вы работаете вместе, установите атрибутную строку в UITextView (или UILabel) следующим образом:

textView.attributedText = myString

Вы не используете textView.text.

Вот результат:

Затем добавьте другую атрибутированную строку, которая не имеет атрибутов. (Обратите внимание, что даже если я использовал let для объявления myString выше, я все еще могу его изменить, потому что это NSMutableAttributedString. Это кажется мне скорее несовместимым, и я не удивлюсь, если это изменится в будущем. Оставьте мне комментарий, когда это произойдет.)

let attrString = NSAttributedString(string: " Attributed Strings")
myString.append(attrString)

Затем мы просто выберем слово «Строки», которое начинается с индекса 17 и имеет длину 7. Обратите внимание, что это NSRange, а не Swift Range. (См. этот ответ для получения дополнительных сведений о диапазонах.) Метод addAttribute позволяет нам поместить имя ключа атрибута в первое место, значение атрибута во втором месте и диапазон в третьем месте.

var myRange = NSRange(location: 17, length: 7) // range starting at location 17 with a lenth of 7: "Strings"
myString.addAttribute(NSAttributedStringKey.foregroundColor, value: UIColor.red, range: myRange)

Наконец, давайте добавим цвет фона. Для разнообразия воспользуемся методом addAttributes (обратите внимание на s). Я мог бы добавить сразу несколько атрибутов с этим методом, но я просто добавлю его снова.

myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedStringKey.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)

Обратите внимание, что атрибуты перекрываются в некоторые места.

Дальнейшее чтение

0
задан RickL 6 June 2018 в 12:02
поделиться