在Swift

时间:2016-01-22 06:04:28

标签: ios swift uitextfield

昨天我正在研究getting and setting the cursor position in a UITextField。现在我试图在光标位置之前获取角色。所以在下面的例子中,我想要返回一个“e”。

enter image description here

func characterBeforeCursor() -> String 

注释

  • 我没有看到任何与此相同的其他SO问题,但也许我错过了它们。

  • 我先写了这个问题,当我找到答案时,我会同时发布问题和答案。当然,欢迎更好的答案。

  • 我说“人物”,但String没问题。

3 个答案:

答案 0 :(得分:13)

如果光标正在显示且位置之前的位置有效,则获取该文本。感谢this answer提供了一些提示。

func characterBeforeCursor() -> String? {

    // get the cursor position
    if let cursorRange = textField.selectedTextRange {

        // get the position one character before the cursor start position
        if let newPosition = textField.position(from: cursorRange.start, offset: -1) {

            let range = textField.textRange(from: newPosition, to: cursorRange.start)
            return textField.text(in: range!)
        }
    }
    return nil
}

enter image description here

的结果
if let text = characterBeforeCursor() {
    print(text)
}
根据你的例子,

是“e”。

答案 1 :(得分:0)

您也可以使用此功能:

NSInteger endOffset = [textfld offsetFromPosition:textfld.beginningOfDocument toPosition:range1.end];

NSRange offsetRange = NSMakeRange(endOffset-1, 1);

NSString *str1 = [textfld.text substringWithRange:offsetRange];
NSLog(@"str1= %@",str1);

答案 2 :(得分:0)

在swift中你可以使用

let range1 : UITextRange = textField.selectedTextRange!

let  endoffset : NSInteger = textField.offsetFromPosition(textField.beginningOfDocument, toPosition: range1.end)

let offsetRange : NSRange = NSMakeRange(endoffset-1, 1)

let index: String.Index = (textField.text?.startIndex.advancedBy(offsetRange.location))!

let str1 : String = (textField.text?.substringFromIndex(index))!

let index1 : String.Index = str1.startIndex.advancedBy(1)

let str2: String = str1.substringToIndex(index1)

print(str2)