일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 리펙터링
- Clean Code
- uitableview
- Human interface guide
- UICollectionView
- SWIFT
- 스위프트
- combine
- ios
- collectionview
- Refactoring
- MVVM
- swiftUI
- tableView
- UITextView
- 리팩토링
- HIG
- Xcode
- swift documentation
- 애니메이션
- RxCocoa
- 클린 코드
- ribs
- uiscrollview
- clean architecture
- map
- Observable
- Protocol
- 리펙토링
- rxswift
- Today
- Total
목록CURSOR (4)
김종권의 iOS 앱 개발 알아가기
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/kAmnH/btsA8q9rRDH/nj6SOUBFUVOJKHbgz7IzQ0/img.png)
1. UITextField, UITextView에서 알면 좋은 개념 - deleteBackward() 2. UITextField, UITextView에서 알면 좋은 개념 - binding (rx.text, editingChnaged, allEditingEvents, shouldChangeCharactersIn, allEditingEvents) 3. UITextField, UITextView에서 알면 좋은 개념 - NSRange, UITextRange (#utf16) 4. UITextField, UITextView에서 알면 좋은 개념 - prefix, suffix, insert, deleteBackward() 개념 현재 화면 상의 cursor 위치 앞쪽의 문자를 삭제하는 UITextField혹은 UITex..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/cT6Whg/btsz6Mf20i5/CIGQIJvnZBCWcaXDvGBGqK/img.gif)
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..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/DB4W2/btszgkrxS5t/pbA2923NRpoFpWL7bidE51/img.gif)
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 ..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bWM13S/btqPKtrtieG/S4xoRPfiVLuKABJfp3DhaK/img.gif)
cocoapod pod 'AnyFormatKit' 구현 import import AnyFormatKit 델리게이트 함수에 적용 textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool 예제1) 폰 번호 포맷 - 010-1234-2134 extension ViewController: UITextFieldDelegate { func textField(_ textField: UITextField, shouldChangeCharactersIn range: NSRange, replacementString string: String) -> Bool { guard..