©️ OverlookArt
首页 / AppleDevelop / UIKit / UITextView

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}

限制输入字符数量

  1. 遵守 UITextViewDelegate 协议
  2. 实现 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}