Получить символ перед курсором в Swift

Вчера я работал над получением и установкой положения курсора вUITextField, Теперь я пытаюсь получить символ непосредственно перед позицией курсора. Так что в следующем примере я бы хотел вернуть "е".

введите описание изображения здесь

func characterBeforeCursor() -> String 

Заметки

  • Я не видел никаких других вопросов, которые были бы такими же, но, возможно, я пропустил их.

  • Сначала я написал этот вопрос, и когда я найду ответ, я опубликую вопрос и ответ одновременно. Конечно, лучшие ответы приветствуются.

  • Я сказал "характер", но String Это хорошо.

3 ответа

Решение

Если курсор показывает, и позиция на одну позицию раньше, чем она действительна, то получите этот текст. Благодаря этому ответу за некоторые подсказки.

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
}

введите описание изображения здесь

Результат

if let text = characterBeforeCursor() {
    print(text)
}

это "е", в соответствии с вашим примером.

В 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)

Вы также можете использовать это:

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

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

NSString *str1 = [textfld.text substringWithRange:offsetRange];
NSLog(@"str1= %@",str1);
Другие вопросы по тегам