YMTextView.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. //
  2. // YMTextView.h
  3. // andaowei
  4. //
  5. // Created by YoMi on 2023/11/6.
  6. //
  7. #import <UIKit/UIKit.h>
  8. NS_ASSUME_NONNULL_BEGIN
  9. @class YMTextView;
  10. typedef void(^YMTextViewHandler)(YMTextView *textView);
  11. typedef void(^YMTextViewHeightDidChangedBlock)(YMTextView *textView, CGFloat currentTextViewHeight);
  12. IB_DESIGNABLE
  13. @interface YMTextView : UITextView
  14. /**
  15. 便利构造器.
  16. */
  17. + (instancetype)textView;
  18. /**
  19. 设定文本开始编辑Block回调. (切记弱化引用, 以免造成内存泄露.)
  20. */
  21. - (void)addTextDidBeginEditingHandler:(YMTextViewHandler)beginEditingHandler;
  22. /**
  23. 设定文本改变Block回调. (切记弱化引用, 以免造成内存泄露.) 需要在setText:方法调用之前,不然获取不到setText:的改变
  24. */
  25. - (void)addTextDidChangeHandler:(YMTextViewHandler)eventHandler;
  26. /**
  27. 设定文本结束编辑Block回调. (切记弱化引用, 以免造成内存泄露.)
  28. */
  29. - (void)addTextDidEndEditingHandler:(YMTextViewHandler)endEditingHandler;
  30. /**
  31. 设定达到最大长度Block回调. (切记弱化引用, 以免造成内存泄露.)
  32. */
  33. - (void)addTextLengthDidMaxHandler:(YMTextViewHandler)maxHandler;
  34. /**
  35. 最大限制文本长度, 默认为无穷大, 即不限制, 如果被设为 0 也同样表示不限制字符数.
  36. */
  37. @property (nonatomic, assign) NSUInteger maxLength;
  38. /**
  39. 圆角半径.
  40. */
  41. @property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
  42. /**
  43. 边框宽度.
  44. */
  45. @property (nonatomic, assign) IBInspectable CGFloat borderWidth;
  46. /**
  47. 边框颜色.
  48. */
  49. @property (nonatomic, strong) IBInspectable UIColor *borderColor;
  50. /**
  51. placeholder, 会自适应TextView宽高以及横竖屏切换, 字体默认和TextView一致.
  52. */
  53. @property (nonatomic, copy) IBInspectable NSString *placeholder;
  54. /**
  55. placeholder文本颜色, 默认为#C7C7CD.
  56. */
  57. @property (nonatomic, strong) IBInspectable UIColor *placeholderColor;
  58. /**
  59. placeholder文本字体, 默认为UITextView的默认字体.
  60. */
  61. @property (nonatomic, strong) UIFont *placeholderFont;
  62. /**
  63. placeholder文本最大行数
  64. */
  65. @property (nonatomic, assign) NSInteger placeholderMaximumNumberOfLines;
  66. /**
  67. placeholder文本换行模式, 默认为NSLineBreakByCharWrapping
  68. */
  69. @property (nonatomic, assign) NSLineBreakMode placeholderLineBreakMode;
  70. /**
  71. UITextView的text和placeholder四边间距 默认UIEdgeInsetsMake(8, 3, 8, 3)
  72. */
  73. @property (nonatomic, assign) IBInspectable UIEdgeInsets ym_textContainerInset;
  74. /**
  75. 是否禁止换行 默认为NO
  76. */
  77. @property (nonatomic, assign) BOOL disableNewline;
  78. /**
  79. 是否禁止空格 默认为NO
  80. */
  81. @property (nonatomic, assign) BOOL disableWhitespace;
  82. /**
  83. 禁止第一个字符输入空格 默认为YES
  84. */
  85. @property (nonatomic, assign) BOOL disableFirstWhitespace;
  86. /**
  87. 是否点击Return按钮自动取消编辑状态 默认为NO
  88. */
  89. @property (nonatomic, assign) BOOL isResignFirstResponderAfterReturn;
  90. /**
  91. 是否允许长按弹出UIMenuController, 默认为YES.
  92. */
  93. @property (nonatomic, assign, getter=isCanPerformAction) BOOL canPerformAction;
  94. /**
  95. 获取自动高度的block回调
  96. */
  97. @property (nonatomic, copy) YMTextViewHeightDidChangedBlock textViewHeightDidChanged;
  98. /**
  99. 最大高度,如果需要随文字改变高度的时候使用
  100. */
  101. @property (nonatomic, assign) CGFloat maxHeight;
  102. /**
  103. 最小高度,如果需要随文字改变高度的时候使用
  104. */
  105. @property (nonatomic, assign) CGFloat minHeight;
  106. /**
  107. 该属性返回一个经过处理的 `self.text` 的值, 去除了首位的空格和换行.
  108. */
  109. @property (nonatomic, readonly) NSString *formatText;
  110. @end
  111. NS_ASSUME_NONNULL_END