2015-07-29 2 views
1

Я делаю заказное расширение клавиатуры для iOS 8 и безуспешно пытаюсь отразить текущее слово, набираемое на UILabel, сидящем на клавиатуре (думаю, автокоррекция). Пока что код, который я написал, отражает предложение перед курсором, а не так, как он записывается, но по мере перемещения курсора из одной позиции в другую. То, что я пытаюсь достичь, точно так же, как первый блок автосохранения на собственной клавиатуре. Кто-нибудь мог бы сказать мне, что я делаю неправильно?Как получить введенное текущее слово?

Код:

override func textWillChange(textInput: UITextInput) { 

    var tokens = (self.textDocumentProxy as! UITextDocumentProxy).documentContextBeforeInput .componentsSeparatedByString(" ") as NSArray 
    var lastWord = tokens.lastObject as! String 
    println(lastWord) 
    bannerView?.btn1.setTitle(lastWord, forState: .Normal) 
} 

Я попытался установить условие, согласно которому, если beforeCursor содержали либо пространство/период/запятую, чтобы установить название кнопки, как "" но это не является эффективным в долгосрочной перспективе, поскольку мне нужно чтобы получить слова, чтобы иметь возможность сделать функцию автокоррекции.

Edit:

Я понял, как получить слово перед курсором (обновленный код выше), но не так, как обновить ярлык, как каждая буква добавляется. func textWillChange(textInput: UITextInput) не работает. Это не она.

Спасибо!

ответ

0

Вы должны использовать textDocumentProxy свойство вашего UIInputViewController:

let proxy = self.textDocumentProxy as! UITextDocumentProxy 

Чтобы получить слово набираясь, я хотел бы предложить что-то вроде этого:

var lastWordTyped: String? { 
     if let documentContext = proxy.documentContextBeforeInput as NSString? { 
      let length = documentContext.length 
      if length > 0 && NSCharacterSet.letterCharacterSet().characterIsMember(documentContext.characterAtIndex(length - 1)) { 
       let components = documentContext.componentsSeparatedByCharactersInSet(NSCharacterSet.alphanumericCharacterSet().invertedSet) as! [String] 
       return components[components.endIndex - 1] 
      } 
     } 
     return nil 
    } 
+0

Почему это избавиться от чисел, а также ? – cyril

+1

См. NSCharacterSet, который я использую: NSCharacterSet.letterCharacterSet(), см. Https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCharacterSet_Class/ для альтернатив. – matthias