일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 애니메이션
- Refactoring
- uitableview
- rxswift
- clean architecture
- uiscrollview
- Observable
- Human interface guide
- map
- HIG
- collectionview
- swift documentation
- tableView
- ribs
- 리팩토링
- Protocol
- combine
- 스위프트
- 리펙토링
- swiftUI
- RxCocoa
- UICollectionView
- 리펙터링
- SWIFT
- ios
- 클린 코드
- Clean Code
- MVVM
- Xcode
- UITextView
- Today
- Total
목록UITextView (20)
김종권의 iOS 앱 개발 알아가기
iOS 17 textViewDidChangeSelection 버그 iOS17 이전까지는 델리게이트에서 selection range가 변경되면 textView.selectedRange값이 실시간으로 변경해주었지만, iOS17 부터는 사용자가 드래그를 놓았을때만 호출됨 심지어 textView.selectedRange값을 계속 print해보아도 cursor를 놓았을때만 변경되는 버그가 존재 extension ViewController: UITextViewDelegate { func textViewDidChangeSelection(_ textView: UITextView) { print("range>", textView.selectedRange) } } 실시간으로 cursor 위치 파악하는 방법 selectio..
UITextView의 Cursor 개념 Cursor는 사용자 편의를 위해서 현재 수정되거나 작성될 곳의 위치를 나타내는 역할 애플에서는 이 Cursor도 코드로 이동시키거나 Cursor의 위치를 파악할 수 있도록 NSRange 형태로 제공 NSRange 개념은 이전 포스팅 글 참고 NSRange 요약 개념 NSRange는 _NSRange의 Typealias로 되어 있고 범위의 시작 위치를 location, 길이를 length 프로퍼티로 표현 public struct _NSRange : @unchecked Sendable { public init() public init(location: Int, length: Int) public var location: Int public var length: Int ..
UITextChecker 개념 교정기능을 제공하는 클래스 오타 검사 자동완성 및 제안 기능 UITextChecker 오타 검사 오타가 있는 mountein 문자열 준비 (mountain으로 잘 교정되는지 확인을 위함) let str = "mountein" UITextChecker 인스턴스 생성 let textChecker = UITextChecker() rangeOfMisspelledWord(in:range:startingAt:wrap:language:) 메소드를 사용 language 값에는 언어코드가 들어가는데, 이 언어코드는 iSO 639-1가 사용 ex) 영어면 en_US, 한국어면 ko ISO 639-1 언어코드표 이 언어코드는 Locale로 접근하여 획득도 가능 Locale.current.ide..
1. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - 단순 텍스트 2. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - UTF16 (이모지를 고려한 처리) 3. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - isScrollEnabled=false인 상태에서 커서 위치로 스크롤링 방법(#caretRect(for:), #scrollToCursor) 문자열 처리 시 주의사항 UTF16를 사용하고 있으므로 🇰🇷 이모지의 크기는 4이며, 1이 아닌 것에 주의 "some string".count의 값은 단순히 글자 수이며, shouldChangeTextIn에서 현재 포커스를 구할 때 NSRange를 사용하는데 이 값 기준은 UTF16으로 글자의..
1. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - 단순 텍스트 2. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - UTF16 (이모지를 고려한 처리) 3. 붙여넣기 글자 제한 UITextView 처리, 커서 이동 처리 방법 - isScrollEnabled=false인 상태에서 커서 위치로 스크롤링 방법(#caretRect(for:), #scrollToCursor) 붙여넣기 글자 제한 로직 123과 456 사이에 최대 글자 300을 넘는 문자열을 붙여넣는 경우 요구사항1) 123과 456사이에 붙여넣기 적용, 300자가 넘는 문자열은 뒤에가 잘리도록 처리 요구사항2) 붙여넣기 이후 커서 위치는 붙여넣은 문자열 바로 뒤에 위치 요구사항3) 이미 300자가 ..
PlaceholderTextView 구현 아이디어 UITextView에는 기본적으로 가지고 있는 placeholder 속성이 없기 때문에 커스텀이 필요 잘못 구현하는 케이스 1) UITextView하나만 가지고 텍스트 입력이 시작될 때 textColor와 text를 순간적으로 변경 -> 포커스 위치가 글씨 맨 오른쪽으로 가거나, 포커스 되는 순간 placeholder 값을 지워함 (placeholder는 한 글자 이상 입력될때 없어지도록 구현 불가( 2) UILabel을 두어 UITextView위에 얹져서 구현 -> 깜빡거리는 포커스보다 UILabel이 위에 있기 때문에 깜빡거리는 포커스가 안보이는 현상 발생 UITextView안에 placeholder 전용으로 사용하는 UITextView를 별도로 두어..
UITextView에서 링크 걸기 dataDetectorTypes = .link 옵션을 주어서 링크 활성화 isEditable도 false로 설정하면, text에 링크가 있으면 자동으로 링크가 자동으로 설정 private lazy var textView: UITextView = { let view = UITextView() view.text = "링크: https://ios-development.tistory.com/" view.dataDetectorTypes = .link view.isEditable = false return view }() 클릭하면 자동으로 safari로 이동 하이퍼 링크로 이동될 때 따로 `UIApplication.shared.open(url)`와 같은 코드가 필요 없는 장점이 존..
UITextView 위 사진처럼 UITextView는 내부적으로 textInputView를 가지고 있는 형태 textInputView를 감싸고 있는 프로퍼티는 textContainer이므로, textInputView 내부의 inset을 조절하고 싶은 경우에는 `textContainerInset` 프로퍼티를 사용 UITextView는 UIScrollView를 상속받고 있으므로, scroll 속성도 갖고있는 상태 UIScrollView에서의 내부 컨텐츠는 textInputView이고, 프레임은 UITextView의 레이아웃에 따름 contentInset, textContainerInset, scrollIndicatorInsets UITextView에서는 내부적으로 textInputView와 UIScrollV..