Удалить целое слово с помощью 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