Удалить целое слово с помощью deleteBackward в пользовательской клавиатуре на iOS 8

Я начинаю разрабатывать пользовательскую клавиатуру с iOS8 и objective-c. Я хотел бы создать кнопку удаления, которая удаляет один символ, в точке вставки, при однократном нажатии и удаляет целые слова при нажатии. deleteBackward, кажется, удаляет один символ, но на Apple разработчикам docs я нашел:

Чтобы определить, сколько текста нужно удалить, когда вы вызываете метод deleteBackward, получите текстовый контекст рядом с точкой вставки из свойства documentContextBeforeInput свойства textDocumentProxy следующим образом:

NSString *precedingContext = self.textDocumentProxy.documentContextBeforeInput;

Затем вы можете удалить то, что вы считаете подходящим, например, один символ или все обратно к символу пробела.

Но я не понимаю, как это достичь... Есть ли способ удалить полное слово?

EDIT: я нашел решение... это простой tokenize на documentContextBeforeInput:

-(void)pressDeleteKey{
NSArray *tokens = [self.textDocumentProxy.documentContextBeforeInput componentsSeparatedByString:@" "];
for (int i = 0; i < [[tokens lastObject] length];i++) {
    [self.textDocumentProxy deleteBackward];
}

}

Ответы

Ответ 1

Swift 1.2 Решение:

extension String {

    var length : Int {
        get{
            return count(self)
        }
    }  
}


func deleteLastWord() {

        if let textArray:[String]? = proxy.documentContextBeforeInput?.componentsSeparatedByString(" "){
        if let validArray = textArray{
            for var i=0; i<validArray.last!.length; i++ {
                            proxy.deleteBackward()
                        }
                }
        }
}

Ответ 2

Я тоже ищу ответ на этот вопрос. До сих пор я должен использовать для цикла, чтобы удалить обратную букву буквой.

Ответ 3

Вероятно, лучше всего сделать ставку char на char до тех пор, пока ваше слово не будет удалено.

Вместо того, чтобы полагаться на "пробелы", я попытался бы перечислить строку в подстроках вроде:

[string enumerateSubstringsInRange:NSMakeRange(0, string.length) options:NSStringEnumerationByWords | NSStringEnumerationLocalized usingBlock:^(NSString * _Nullable substring, NSRange substringRange, NSRange enclosingRange, BOOL * _Nonnull stop) {
    // Do whatever you want with the words (substrings)
    [words addObject:@[substring, [NSValue valueWithRange:substringRange]]];
}];

Затем просто удалите обратное для соответствующего количества символов из найденного диапазона.

Из официальной документации Apple:

При использовании UITextDocumentProxy у вас будет не простой способ, чтобы удалить текст для диапазона, подстроки или чего-нибудь еще, что может сделать вашу жизнь более удобной. Просто напишите свои собственные методы! Счастливое кодирование!

.. lol