이 답변은 Swift 4.2에서 업데이트되었습니다.
빠른 참조
속성 문자열을 만들고 설정하는 일반적인 형식은 다음과 같습니다. 아래에서 다른 일반적인 옵션을 찾을 수 있습니다.
// create attributed string
let myString = "Swift Attributed String"
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]
let myAttrString = NSAttributedString(string: myString, attributes: myAttribute)
// set attributed text on a UILabel
myLabel.attributedText = myAttrString
let myAttribute = [ NSAttributedString.Key.foregroundColor: UIColor.blue ]
let myAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
let myAttribute = [ NSAttributedString.Key.font: UIFont(name: "Chalkduster", size: 18.0)! ]
let myAttribute = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.single.rawValue ]
let myShadow = NSShadow()
myShadow.shadowBlurRadius = 3
myShadow.shadowOffset = CGSize(width: 3, height: 3)
myShadow.shadowColor = UIColor.gray
let myAttribute = [ NSAttributedString.Key.shadow: myShadow ]
이 게시물의 나머지 부분은 관심있는 사람들에게 더 자세한 내용을 제공합니다.
속성
문자열 속성은의 형식으로 된 사전 일뿐입니다 [NSAttributedString.Key: Any]
. 여기서 NSAttributedString.Key
속성의 키 이름 Any
이고 일부 유형의 값입니다. 값은 글꼴, 색상, 정수 또는 다른 것일 수 있습니다. Swift에는 이미 사전 정의 된 많은 표준 속성이 있습니다. 예를 들면 다음과 같습니다.
- 키 이름 :
NSAttributedString.Key.font
, 값 : aUIFont
- 키 이름 :
NSAttributedString.Key.foregroundColor
, 값 : aUIColor
- 키 이름 :
NSAttributedString.Key.link
, 값 : NSURL
또는NSString
다른 많은 것들이 있습니다. 자세한 내용은 이 링크 를 참조하십시오 . 다음과 같은 사용자 정의 속성을 만들 수도 있습니다.
키 이름 : NSAttributedString.Key.myName
, 값 : 일부 유형.
당신은 할 경우 확장 :
extension NSAttributedString.Key {
static let myName = NSAttributedString.Key(rawValue: "myCustomAttributeKey")
}
Swift에서 속성 생성
다른 사전을 선언하는 것처럼 속성을 선언 할 수 있습니다.
// single attributes declared one at a time
let singleAttribute1 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let singleAttribute2 = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
let singleAttribute3 = [ NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]
// multiple attributes declared at once
let multipleAttributes: [NSAttributedString.Key : Any] = [
NSAttributedString.Key.foregroundColor: UIColor.green,
NSAttributedString.Key.backgroundColor: UIColor.yellow,
NSAttributedString.Key.underlineStyle: NSUnderlineStyle.double.rawValue ]
// custom attribute
let customAttribute = [ NSAttributedString.Key.myName: "Some value" ]
rawValue
밑줄 스타일 값에 필요한 것을 유의하십시오 .
속성은 사전 일 뿐이므로 빈 사전을 만든 다음 키-값 쌍을 추가하여 속성을 만들 수도 있습니다. 값에 여러 유형이 포함 된 경우 유형으로 사용해야 Any
합니다. multipleAttributes
위와 같은 예를 다음과 같이 재현했습니다 :
var multipleAttributes = [NSAttributedString.Key : Any]()
multipleAttributes[NSAttributedString.Key.foregroundColor] = UIColor.green
multipleAttributes[NSAttributedString.Key.backgroundColor] = UIColor.yellow
multipleAttributes[NSAttributedString.Key.underlineStyle] = NSUnderlineStyle.double.rawValue
속성이있는 문자열
이제 속성을 이해 했으므로 속성 문자열을 만들 수 있습니다.
초기화
속성이 지정된 문자열을 만드는 몇 가지 방법이 있습니다. 읽기 전용 문자열 만 필요한 경우을 사용할 수 있습니다 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: [NSAttributedString.Key.myName: "A value"])
// Initialize with a string and separately declared attribute(s)
let myAttributes1 = [ NSAttributedString.Key.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: [NSAttributedString.Key.myName: "A value"])
// Initialize with a string and separately declared attribute(s)
let myAttributes2 = [ NSAttributedString.Key.foregroundColor: UIColor.green ]
let mutableAttrString4 = NSMutableAttributedString(string: "Hello.", attributes: myAttributes2)
속성 문자열 변경
예를 들어이 게시물의 맨 위에 표시된 문자열을 만들어 봅시다.
먼저 NSMutableAttributedString
새 글꼴 속성 으로을 만듭니다 .
let myAttribute = [ NSAttributedString.Key.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
스위프트가 아니라는 것에 주목하십시오 Range
. ( 범위에 대한 자세한 내용은 이 답변 을 참조하십시오 .)이 addAttribute
방법을 통해 속성 키 이름을 첫 번째 지점에, 속성 값을 두 번째 지점에, 범위를 세 번째 지점에 넣을 수 있습니다.
var myRange = NSRange(location: 17, length: 7) // range starting at location 17 with a lenth of 7: "Strings"
myString.addAttribute(NSAttributedString.Key.foregroundColor, value: UIColor.red, range: myRange)
마지막으로 배경색을 추가하겠습니다. 다양성을 위해 addAttributes
방법을 사용합시다 (참고 s
). 이 방법으로 여러 속성을 한 번에 추가 할 수 있지만 다시 추가 할 것입니다.
myRange = NSRange(location: 3, length: 17)
let anotherAttribute = [ NSAttributedString.Key.backgroundColor: UIColor.yellow ]
myString.addAttributes(anotherAttribute, range: myRange)
일부 위치에서는 속성이 겹칩니다. 속성을 추가해도 이미 존재하는 속성을 덮어 쓰지 않습니다.
관련
추가 자료
NSUnderlineStyleAttributeName: NSUnderlineStyle.StyleSingle.rawValue | NSUnderlineStyle.PatternDot.rawValue