2015-06-30 4 views
0

Скажем, я хочу проверить, являются ли последние 5 символов, введенные в UITextView, «мышь». Как мне это сделать? В частности, в Swift из-за того, как индексы строк отличаются от Objective-C из-за того, как хранятся emojis и т.п.Как получить последние n символов, введенных в UITextView?

Я не могу понять это. И помните, что последние n символов не могут быть напечатаны в конце текстового вида, курсор может находиться в середине текста.

+0

NSString * trimmedString = [textfield.text substringFromIndex: МАКС ((INT) [длина строки] -5, 0)]; // в случае, если длина строки меньше 5 символов. –

+0

взгляните на http://stackoverflow.com/questions/6591538/how-to-capture-last-4-characters-from-nsstring –

+0

- это требование, чтобы символы были смежными? или вы просто спрашиваете: «Как я могу отслеживать последние 5 нажатий клавиш, независимо от того, где они произошли в текстовом представлении»? – fqdn

ответ

0

Вы можете использовать substringFromIndex с textView.text .. Таким образом, последние 5 символов могут быть получены с помощью этого кода.

let strLast5: String = textView.text.substringToIndex(countElements(textView.text) - 5); 
+0

По моему второму абзацу это не обязательно в конце? –

+0

Ох .. Это был не мой шанс, тогда .. Извините, для этого yopu нужно пойти для метода делегата shouldChangeTextInRange. –

0

Эта функция возвращает последний п символы из последней позиции курсора в TextView, если позиция курсора не слишком близко к началу строки, в этом случае он будет возвращаться с начала строки к курсору.

Для проверки каждого изменения делают ViewController делегат UITextViewDelegate и осуществлять textViewDidChange()

class ViewController: UIViewController, UITextViewDelegate { 

    override func viewDidLoad() { 
     super.viewDidLoad() 
     textView.delegate = self 
    } 

    func textViewDidChange(textView: UITextView) { 
     print(lastNChars(5, textView: textView)!) 
    } 

    func lastNChars(n: Int, textView: UITextView) -> String? { 
     if let selectedRange = textView.selectedTextRange { 
      let startPosition: UITextPosition = textView.beginningOfDocument 
      let cursorPosition = textView.offsetFromPosition(startPosition, toPosition: selectedRange.start) 
      let chars = textView.text as String 
      var lastNChars: Int! 
      if n > cursorPosition { 
       lastNChars = cursorPosition 
      } else { 
       lastNChars = n 
      } 
      let startOfIndex = chars.startIndex.advancedBy(cursorPosition - lastNChars) 
      let endOfIndex = chars.startIndex.advancedBy(cursorPosition) 
      let lastChars = chars.substringWithRange(startOfIndex ..< endOfIndex) 
      return lastChars 
     } 
     return nil 
    } 
} 
Смежные вопросы