You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

205 lines
5.9 KiB

//
// CXTextView.m
// CXTextView_Example
//
// Created by caixiang on 2019/5/6.
// Copyright © 2019年 616704162@qq.com. All rights reserved.
//
#import "CXTextView.h"
#import "CXCustomTextView.h"
@interface CXTextView()<UITextViewDelegate>
@end
@implementation CXTextView
@synthesize text = _text;
#pragma mark - life Cycle
- (instancetype)initWithCoder:(NSCoder *)aDecoder{
self = [super initWithCoder: aDecoder];
if (self) {
[self initilize];
}
return self;
}
- (instancetype)initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
if (self) {
[self initilize];
}
return self;
}
- (void)layoutSubviews{
[super layoutSubviews];
self.textView.width = self.frame.size.width - 2 *self.h_margin;
}
#pragma mark - UITextViewDelegate
-(void)textViewDidChange:(UITextView *)textView{
!self.textDidChangeHandlerBlock?:self.textDidChangeHandlerBlock(textView);
[self updateTextViewHeight];
!self.textHeightChangeBlock?:self.textHeightChangeBlock(self.height);
[textView scrollRangeToVisible:NSMakeRange(textView.selectedRange.location, 1)];
}
- (void)textViewDidBeginEditing:(UITextView *)textView {
!self.textViewDidBeginEditingBlock?:self.textViewDidBeginEditingBlock(textView);
}
- (void)textViewDidEndEditing:(UITextView *)textView {
!self.textViewDidEndEditingBlock?:self.textViewDidEndEditingBlock(textView);
}
- (BOOL)textView:(YYTextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
{
if ([text isEqualToString:@"\n"]){
NSString *sendMessage = [textView.text stringByReplacingOccurrencesOfString:@" " withString:@""];
if (sendMessage.length > 0) {
if (self.returnHandlerBlock) {
self.returnHandlerBlock();
}
}
return NO;
}
return YES;
}
- (void)updateTextViewHeight {
CGFloat contentSizeH = ceilf(self.textView.contentSize.height);
//内容高度
if (self.textView.text.length == 0) {
contentSizeH = ceilf(self.font.lineHeight * self.initiLine);
}
//最大高度
CGFloat maxHeight = ceilf(self.font.lineHeight * self.maxLine);
//初始高度
CGFloat initiTextViewHeight = ceilf(self.initiLine *self.font.lineHeight);
if (contentSizeH <= maxHeight) {
if (contentSizeH <= initiTextViewHeight) {
self.textView.height = ceilf(initiTextViewHeight);
}else{
self.textView.height = ceilf(contentSizeH);
}
}else{
self.textView.height = ceilf(maxHeight);
}
self.height = self.textView.height + 2 * self.v_margin;
}
#pragma mark - private
//初始化
- (void)initilize{
self.h_margin = 0;
self.v_margin = 8;
self.initiLine = 1;
self.maxLine = CGFLOAT_MAX;
self.maxLength = CGFLOAT_MAX;
self.font = [UIFont systemFontOfSize:16];
[self addSubview:self.textView];
}
- (void)updateTextViewFrame{
self.textView.frame = CGRectMake(self.h_margin, self.v_margin, self.frame.size.width - 2 *self.h_margin, ceilf(self.initiLine *self.font.lineHeight));
self.height = self.v_margin *2 + ceilf(self.initiLine *self.font.lineHeight);
}
- (void)textViewBecomeFirstResponder
{
[self.textView becomeFirstResponder];
}
#pragma mark - getter & setter
- (void)setMaxLine:(NSInteger)maxLine{
_maxLine = maxLine;
}
- (void)setH_margin:(CGFloat)h_margin{
_h_margin = h_margin;
[self updateTextViewFrame];
}
- (void)setV_margin:(CGFloat)v_margin{
_v_margin = v_margin;
[self updateTextViewFrame];
}
- (void)setInitiLine:(NSInteger)initiLine{
_initiLine = initiLine;
[self updateTextViewFrame];
}
- (void)setFont:(UIFont *)font{
_font = font;
self.textView.font = font;
[self updateTextViewFrame];
}
- (void)setPlaceholderColor:(UIColor *)placeholderColor {
_placeholderColor = placeholderColor;
self.textView.placeholderColor = placeholderColor;
}
- (void)setTextColor:(UIColor *)textColor {
_textColor = textColor;
self.textView.textColor = textColor;
}
- (void)setPlaceholder:(NSString *)placeholder{
_placeholder = placeholder;
self.textView.placeholder = placeholder;
}
- (void)setPlacePoint:(CGPoint)placePoint{
_placePoint = placePoint;
self.textView.placePoint = placePoint;
}
-(void)setMaxLength:(NSInteger)maxLength {
_maxLength = maxLength;
self.textView.maxLength = maxLength;
}
- (void)setText:(NSString *)text {
_text = [text copy];
self.textView.text = text;
}
- (NSString *)text {
return self.textView.text;
}
- (CXCustomTextView *)textView{
if (!_textView) {
_textView = [[CXCustomTextView alloc] initWithFrame:CGRectMake(self.h_margin, self.v_margin, self.frame.size.width - 2 *self.h_margin, self.initiLine *self.font.lineHeight)];
_textView.textContainerInset = UIEdgeInsetsZero;
_textView.delegate = self;
_textView.backgroundColor = [UIColor whiteColor];
_textView.textColor = [UIColor blackColor];
_textView.placeholder = TFLocalizedString(@"请输入");
__weak __typeof(self)weakSelf = self;
_textView.textLengthDidMaxHandlerBlock = ^(CXCustomTextView *textView) {
__strong __typeof(weakSelf)sSelf = weakSelf;
!sSelf.textLengthDidMaxHandlerBlock?:sSelf.textLengthDidMaxHandlerBlock(textView);
};
_textView.textDidChangeHandlerBlock = ^(CXCustomTextView *textView) {
__strong __typeof(weakSelf)sSelf = weakSelf;
!sSelf.textDidChangeHandlerBlock?:sSelf.textDidChangeHandlerBlock(textView);
[sSelf updateTextViewHeight];
if (textView.text.length > 0) {
!sSelf.textHeightChangeBlock?:sSelf.textHeightChangeBlock(sSelf.height);
} else {
!sSelf.textHeightChangeBlock?:sSelf.textHeightChangeBlock(self.v_margin *2 + ceilf(self.initiLine *self.font.lineHeight));
}
};
}
return _textView;
}
@end