Skip to content

Instantly share code, notes, and snippets.

@matsuda
Created August 13, 2018 08:24
Show Gist options
  • Save matsuda/6d63c4959e43c1c969d4097f9837a87d to your computer and use it in GitHub Desktop.
Save matsuda/6d63c4959e43c1c969d4097f9837a87d to your computer and use it in GitHub Desktop.
UITextViewの文字数制御
/// 文字数制御
/// refs: https://akaimo.hatenablog.jp/entry/2015/09/13/150241
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
self.previousText = textView.text
self.lastReplaceRange = range
self.lastReplacementString = text
return true
}
func textViewDidChange(_ textView: UITextView) {
guard textView.markedTextRange == nil else { return }
guard textView.text.count > messageMaxCount else {
return
}
let offset = messageMaxCount - textView.text.count
let replacementString = lastReplacementString[..<lastReplacementString.index(lastReplacementString.endIndex, offsetBy: offset)]
let text = previousText.replacingCharacters(in: Range(lastReplaceRange, in: previousText)!, with: String(replacementString))
if let range = textView.selectedTextRange, let position = textView.position(from: range.start, offset: offset) {
let selectedTextRange = textView.textRange(from: position, to: position)
textView.text = text
textView.selectedTextRange = selectedTextRange
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment