Konten berikut berlaku untuk UITextField
dan UITextView
.
Informasi berguna
Bagian paling awal dari teks bidang teks:
let startPosition: UITextPosition = textField.beginningOfDocument
Bagian paling akhir dari teks bidang teks:
let endPosition: UITextPosition = textField.endOfDocument
Rentang yang saat ini dipilih:
let selectedRange: UITextRange? = textField.selectedTextRange
Dapatkan posisi kursor
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
Atur posisi kursor
Untuk menyetel posisi, semua metode ini sebenarnya menyetel rentang dengan nilai awal dan akhir yang sama.
Untuk permulaan
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Sampai akhir
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
Ke satu posisi di sebelah kiri posisi kursor saat ini
// only if there is a currently selected range
if let selectedRange = textField.selectedTextRange {
// and only if the new position is valid
if let newPosition = textField.position(from: selectedRange.start, offset: -1) {
// set the new position
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
}
Ke posisi yang sewenang-wenang
Mulailah dari awal dan pindahkan 5 karakter ke kanan.
let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
Terkait
Pilih semua teks
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
Pilih serangkaian teks
// Range: 3 to 7
let startPosition = textField.position(from: textField.beginningOfDocument, offset: 3)
let endPosition = textField.position(from: textField.beginningOfDocument, offset: 7)
if startPosition != nil && endPosition != nil {
textField.selectedTextRange = textField.textRange(from: startPosition!, to: endPosition!)
}
Sisipkan teks pada posisi kursor saat ini
textField.insertText("Hello")
Catatan
Lihat juga
textField.endOfDocument
. Anda juga bisa menggunakan garis bawah atau spasi untuk mewakili huruf yang hilang.dalam kasus saya, saya harus menggunakan DispatchQueue:
tidak ada yang lain dari ini dan utas lainnya yang berfungsi.
PS: Saya memeriksa ulang utas mana yang menjalankan textViewDidBeginEditing, dan itu utas utama, karena semua UI harus berjalan, jadi tidak yakin mengapa penundaan kecil itu menggunakan main.asynch bekerja.
sumber
textViewDidBeginEditing
. Jadi dengan menempatkannya di antrian, itu akan terjadi setelah pemanggil selesai.Untuk mengatur posisi kursor pada titik Anda:
Untuk mengatur ulang posisi kursor:
Catatan : Contoh ini berfungsi di Textview & Textfield.
sumber
sumber