如何在UITextView中输入最后n个字符?

时间:2015-06-30 04:23:30

标签: ios string swift ios8 uitextview

说我想检查UITextView中输入的最后5个字符是否是"鼠标"。我该怎么做呢?特别是在Swift中,因为字符串索引与Objective-C的不同,因为存储了表情符号等。

我似乎无法弄清楚这一点。请记住,最后n个字符可能不会在文本视图的末尾键入,光标可能位于文本的中间。

3 个答案:

答案 0 :(得分:0)

您可以将def removePunctuationU(text): from string import punctuation return u' '.join(text.translate({ord(c): None for c in punctuation}).split()) substringFromIndex一起使用。因此,此代码可以获取最后5个字符。

textView.text

答案 1 :(得分:0)

此函数将返回textView中最后一个光标位置的最后n个字符,除非光标位置太靠近字符串的开头,在这种情况下它将从字符串的开头返回到光标。

要检查每个更改,请使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
    }
}

答案 2 :(得分:-1)

快速4,您只需使用textView.text.last