Swift 4 UITextView를 편리하게 사용하는 Extension을 작성해 보았습니다.
14243 단어 Swift4SwiftcaretUITextView확장
소개
안녕하세요
UITextView를 세밀하게 제어하려고 할 때,
조사했을 때에 기사가 조금 낡았거나, Swift4. 0으로 이름이 바뀌거나 하거나 조금 고민했기 때문에, 정리로서 써 보았습니다. 도움이되면 다행입니다.Apple Swift version 4.1
Xcode Version 9.3.1
샘플
caret의 위치를 취득한다
caret의 위치를 취득한다
왼쪽에서 세어, 외형상의 몇번째에 caret가 있는지 돌려줍니다.
// デフォルトにあるプロパティ
textView.selectedRange.location // 8
// Extension
textView.currentCaretOffset // 7
캐럿을 선두·말미로 이동시킨다
// ←ボタン 先頭へ移動します
textView.caretMove(to: .leading)
// →ボタン 末尾に移動します
textView.caretMove(to: .trailing)
캐럿을 현재 위치에서 이동
현재의 위치로부터 지정의 수를 이동시킵니다.
+
그렇다면 오른쪽 방향으로, -
그렇다면 왼쪽 방향으로 이동합니다.// →ボタン
textView.caretMove(to: 1)
// ←ボタン
textView.caretMove(to: -1)
caret의 색 변경
실은 기호로 변수명을 바꾼 것뿐입니다.
// キャレットを緑色に変更する
textView.caretColor = UIColor.green
모든 문자 선택
UITextView의 모든 문자를 선택합니다.
// 文字全てを選択します
textView.selectAllTexts()
문자를 지정된 범위에서 선택
start는 시작 위치이고 length는 선택하는 범위입니다.
// 見た目上の文字の長さから選択します
textView.selectTexts(start: 0, length: 7)
문자가 선택되었는지 여부
UITextRange
의 isEmpty
는 아래 이미지와 같아서 조금만 개선해 보았습니다.소스 코드
변수명 등 자유롭게 변경해 주십시오.
UITextFieldExt.swiftimport UIKit
extension UITextView {
enum UITextViewDirection {
case leading
case trailing
}
// キャレットの色を変更します
var caretColor: UIColor {
get { return self.tintColor }
set { self.tintColor = newValue}
}
// 文字が選択されているかどうか
var isTextSelected: Bool {
guard let range = selectedTextRange else { return false }
return !range.isEmpty
}
// 先頭から数えたキャレットの見た目上の文字の位置を示します
var currentCaretOffset: Int {
let current = selectedRange.location
let diff = text.length - text.count
return current - diff
}
// キャレットを移動させます
func caretMove(to direction: UITextViewDirection) {
switch direction {
case .leading:
self.selectedTextRange = textRange(from: beginningOfDocument, to: beginningOfDocument)
case .trailing:
self.selectedTextRange = textRange(from: endOfDocument, to: endOfDocument)
}
}
// キャレットを移動させます
func caretMove(to offset: Int) {
let current = selectedRange.location
let to = current + offset
self.selectedRange = NSRange(location: to, length: 0)
}
// 文字全てを選択します
func selectAllTexts() {
self.selectedTextRange = textRange(from: beginningOfDocument, to: endOfDocument)
}
// 見た目上の文字の長さから選択します
func selectTexts(start: Int = 0, length: Int) {
let diff = text.length - text.count
self.selectedRange = NSRange(location: start, length: length + diff)
}
// NSRangeとして取得します
var selectedTextNSRange: NSRange? {
guard let range = selectedTextRange else { return nil }
let location = offset(from: beginningOfDocument, to: range.start)
let length = offset(from: range.start, to: range.end)
return NSRange(location: location, length: length)
}
}
참고로 한 기사
import UIKit
extension UITextView {
enum UITextViewDirection {
case leading
case trailing
}
// キャレットの色を変更します
var caretColor: UIColor {
get { return self.tintColor }
set { self.tintColor = newValue}
}
// 文字が選択されているかどうか
var isTextSelected: Bool {
guard let range = selectedTextRange else { return false }
return !range.isEmpty
}
// 先頭から数えたキャレットの見た目上の文字の位置を示します
var currentCaretOffset: Int {
let current = selectedRange.location
let diff = text.length - text.count
return current - diff
}
// キャレットを移動させます
func caretMove(to direction: UITextViewDirection) {
switch direction {
case .leading:
self.selectedTextRange = textRange(from: beginningOfDocument, to: beginningOfDocument)
case .trailing:
self.selectedTextRange = textRange(from: endOfDocument, to: endOfDocument)
}
}
// キャレットを移動させます
func caretMove(to offset: Int) {
let current = selectedRange.location
let to = current + offset
self.selectedRange = NSRange(location: to, length: 0)
}
// 文字全てを選択します
func selectAllTexts() {
self.selectedTextRange = textRange(from: beginningOfDocument, to: endOfDocument)
}
// 見た目上の文字の長さから選択します
func selectTexts(start: Int = 0, length: Int) {
let diff = text.length - text.count
self.selectedRange = NSRange(location: start, length: length + diff)
}
// NSRangeとして取得します
var selectedTextNSRange: NSRange? {
guard let range = selectedTextRange else { return nil }
let location = offset(from: beginningOfDocument, to: range.start)
let length = offset(from: range.start, to: range.end)
return NSRange(location: location, length: length)
}
}
봐 주셔서 감사합니다.
Reference
이 문제에 관하여(Swift 4 UITextView를 편리하게 사용하는 Extension을 작성해 보았습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/KikurageChan/items/672055ac71dc20afe80c텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)