SAIInputTextField.swift 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. //
  2. // SAIInputTextField.swift
  3. // SAIInputBar
  4. //
  5. // Created by SAGESSE on 7/23/16.
  6. // Copyright © 2016-2017 SAGESSE. All rights reserved.
  7. //
  8. import UIKit
  9. internal class SAIInputTextField: UITextView {
  10. override var contentSize: CGSize {
  11. didSet {
  12. item.contentSizeChanged()
  13. }
  14. }
  15. override var text: String! {
  16. set {
  17. super.text = newValue
  18. delegate?.textViewDidChange?(self)
  19. }
  20. get {
  21. return super.text
  22. }
  23. }
  24. override var attributedText: NSAttributedString! {
  25. set {
  26. super.attributedText = newValue
  27. delegate?.textViewDidChange?(self)
  28. }
  29. get {
  30. return super.attributedText
  31. }
  32. }
  33. // override func becomeFirstResponder() -> Bool {
  34. // super.becomeFirstResponder()
  35. // return self.becomeFirstResponder()
  36. // }
  37. func insertAttributedText(_ attributedText: NSAttributedString) {
  38. let currnetTextRange = selectedTextRange ?? UITextRange()
  39. let newTextLength = attributedText.length
  40. // read postion
  41. let location = offset(from: beginningOfDocument, to: currnetTextRange.start)
  42. let length = offset(from: currnetTextRange.start, to: currnetTextRange.end)
  43. let newRange = NSMakeRange(location, newTextLength)
  44. // update text
  45. let att = typingAttributes as! [NSAttributedString.Key:Any]
  46. textStorage.replaceCharacters(in: NSMakeRange(location, length), with: attributedText)
  47. textStorage.addAttributes(att, range: newRange)
  48. // update new text range
  49. let newPosition = position(from: beginningOfDocument, offset: location + newTextLength) ?? UITextPosition()
  50. selectedTextRange = textRange(from: newPosition, to: newPosition)
  51. }
  52. lazy var item: SAIInputTextFieldItem = SAIInputTextFieldItem(textView: self, backgroundView: self.backgroundView)
  53. lazy var backgroundView: UIImageView = UIImageView()
  54. }