UITextField/UITextView

以下內(nèi)容適用于UITextFieldUITextView。

修改光標(biāo)的起始位置

/// 方法一
/// 此方法只會修改光標(biāo)的位置,不會更改placeholder的文案位置
text.setValue(NSNumber(value: 12), forKey: "paddingLeft")

/// 方法二
/// 此方法會同時修改光標(biāo)和placeholder的位置
let leftV = UIView(frame: CGRect(x: 0, y: 0, width: 8, height: 1))
text.leftView = leftV
text.leftViewMode = .always

有用的信息

文本字段文本的開頭:

let startPosition: UITextPosition = textField.beginningOfDocument

文本字段文本的最后:

let endPosition: UITextPosition = textField.endOfDocument

當(dāng)前選擇的范圍:

let selectedRange: UITextRange? = textField.selectedTextRange

獲取光標(biāo)位置

if let selectedRange = textField.selectedTextRange {

    let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)

    print("\(cursorPosition)")
}

設(shè)置光標(biāo)位置

為了設(shè)置位置,所有這些方法實際上都是設(shè)置具有相同開始值和結(jié)束值的范圍。
到了開始

let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)

到最后

let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)

到當(dāng)前光標(biāo)位置左側(cè)的一個位置

// 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)
    }
}

到任意位置
從頭開始,向右移動5個字符。

let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {

    textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}

有關(guān)

選擇所有文字

textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)

選擇一系列文字

// Range: 3 to 7let 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!)
}

在當(dāng)前光標(biāo)位置插入文本

textField.insertText("Hello")

筆記

  • 用于textField.becomeFirstResponder()將焦點置于文本字段并使鍵盤顯示。

  • 有關(guān)如何在某個范圍內(nèi)獲取文本,請參閱此答案。

也可以看看

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容