iOS/UIKit
NSTextAttachment
Hamp
2025. 7. 23. 09:41
반응형
👋 들어가기 전
[Text 시리즈 3] TextKit1
👋 들어가기 전이번 텍스트 시리즈는 TextKit1이다. 🙋: TextKit2가 나왔는데 왜 TextKit1을 ?? 뒷북 너무 심하다 😀: 1도 모르는데 2를 봐서 뭐함? 나는 앞에가 이해가 안되면, 뒤에도 이해를 못한 경험
hamp.tistory.com
이전 TextKit1 내용에서 먼저 살짝 다뤘던건데, NSTextAttachment를 코드로 한번 살펴보면 좋을 것 같아서 다시 찾아왔다.

🏁 학습할 내용
- 개요
- 역할
- 구성
- 상세 설명
- 언제 어떤 구성요소를 써야할까?
- 예제
🔍 개요
공식 문서를 살펴보자.
✅ 역할
NSAttributedString에 첨부 파일(이미지 등)을 넣기 위한 객체
- NSAttributedString 클래스는 “attachment key” 아래에 저장되는 특성(attribute) 값으로 NSTextAttachment 객체를 사용함.
- 이 객체는 내부에 NSData 객체 또는 FileWrapper 객체를 가지고 있어, 첨부된 파일의 내용을 포함할 수 있음.
- 해당 클래스의 속성들은 인터페이스에서 이 첨부 파일(attachment)이 어떻게 보일지를 설정함.
- macOS에서는 첨부된 내용을 그려주는 셀 객체(NSTextAttachmentCellProtocol 프로토콜을 따름) 를 사용함.
- 이 셀은 이미지 렌더링뿐 아니라 마우스 이벤트 처리도 담당함.
🍱 구성
| 구성 여소 | 타입 |
| contents | Data? |
| fileType | String? |
| fileWrapper | FileWrapper? |
| image | UIImage? / NSImage? |
| bounds | CGRect |
💡 상세 설명
🔹 content & fileType
- contents: 첨부된 콘텐츠의 실제 데이터를 담는 Data 객체
- fileType: 이 콘텐츠의 타입을 나타내는 문자열 (ex: "public.png", "application/pdf")
🔹 fileWrapper
- FileWrapper 객체는 디렉토리/파일 등 파일 시스템 단위로 표현할 수 있음
- contents보다 복잡한 파일 구조를 표현할 수 있음 (예: 번들, PDF, 패키지)
🔹 image
- 첨부 콘텐츠가 이미지일 때, 해당 이미지를 image를 지정할 때 사용
🔹 bounds
- 이미지 또는 콘텐츠가 렌더링될 크기와 위치
📌 언제 어떤 구성요소를 써야할까?
| 상황 | 사용할 구성 요소 |
| 간단한 이미지 첨부 | image, bounds |
| 바이너리 데이터로 첨부 | contents, fileType |
| 파일 시스템에서 첨부 | fileWrapper |
🔥 예제 코드
// 1. 기본 문자열 생성
let leadingText = NSAttributedString(string: "Hello ", attributes: [
.font: UIFont.systemFont(ofSize: 18)
])
// 2. 이미지 첨부 생성
let attachment = NSTextAttachment()
attachment.image = UIImage(systemName: "star.fill") // 시스템 이미지 사용 예시
// 이미지 크기 조절 (폰트 높이에 맞추기)
let imageSize: CGFloat = 18
attachment.bounds = CGRect(x: 0, y: -3, width: imageSize, height: imageSize)
let imageAttrString = NSAttributedString(attachment: attachment)
// 3. 후속 문자열 생성
let trailingText = NSAttributedString(string: " World!", attributes: [
.font: UIFont.systemFont(ofSize: 18)
])
// 4. 최종 문자열 결합
let finalText = NSMutableAttributedString()
finalText.append(leadingText)
finalText.append(imageAttrString)
finalText.append(trailingText)
// 5. 적용
textView.attributedText = finalText
self.view.addSubview(textView)

출처
https://developer.apple.com/documentation/uikit/nstextattachment
NSTextAttachment | Apple Developer Documentation
The values for the attachment characteristics of attributed strings and related objects.
developer.apple.com
반응형