UITextView
常用的属性
1let textView = UITextView()
2
3// 设置输入文字的样式属性
4textView.typingAttributes = [
5 .font: UIFont.systemFont(ofSize: 16),
6 .foregroundColor: UIColor.black
7]
8
9// 设置链接文字的样式属性
10textView.linkTextAttributes = [
11 .foregroundColor: UIColor.blue,
12 .underlineStyle: NSUnderlineStyle.single
13]
14
15// 设置键盘上的附加视图
16textView.inputAccessoryView = UIToolbar(frame: CGRect(x: 0, y: 0, width: SCREEN_WIDTH, height: 44))
插入、删除、替换内容
1public func updateCursorPosition(range: NSRange) {
2 self.selectedRange = range
3}
4
1public func insertAttrStringAtCursor(AttrString string: NSAttributedString) {
2 // self: UITextView 自身
3 // 插入属性文本到光标位置
4 self.textStorage.insert(string, at: self.selectedRange.location)
5 // 计算光标位置
6 let cursorRange = NSRange(location: self.selectedRange.location + string.length, length: 0)
7 // 更新光标位置
8 updateCursorPosition(range: cursorRange)
9 // 调用自身的代理
10 self.delegate?.textViewDidChange?(self)
11}
1public func replace(AttrString string: NSAttributedString, ForRange range: NSRange) {
2 // 替换属性文本到指定位置
3 self.textStorage.replaceCharacters(in: range, with: string)
4 // 计算光标位置
5 let cursorRange = NSRange(location: range.location + string.length, length: 0)
6 // 更新光标位置
7 updateCursorPosition(range: cursorRange)
8 // 调用自身的代理
9 self.delegate?.textViewDidChange?(self)
10}
1public func deleteAttrString(ForRange range: NSRange) {
2 // 删除指定位置的属性文本
3 self.textStorage.deleteCharacters(in: range)
4 // 计算光标位置
5 let cursorRange = NSRange(location: range.location, length: 0)
6 // 更新光标位置
7 updateCursorPosition(range: cursorRange)
8 // 调用自身的代理
9 self.delegate?.textViewDidChange?(self)
10}
限制输入字符数量
- 遵守 UITextViewDelegate 协议
- 实现 textView(_:shouldChangeTextIn:replacementText:) 方法
1// 限制输入字符, 包括中文输入法
2extension MyViewController: UITextViewDelegate {
3 func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
4 guard let currentText = textView.text as NSString? else { return true }
5 // 计算新文本内容
6 let newText = currentText.replacingCharacters(in: range, with: text)
7 // 限制新文本内容的长度为12个字符
8 return newText.count <= 12
9 }
10}