123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417 |
- //
- // YOUPAINIMInputToolBar.m
- // NIMKit
- //
- // Created by chris
- // Copyright (c) 2015年 NetEase. All rights reserved.
- //
- #import "YOUPAINIMInputToolBar.h"
- #import "YOUPAINIMGrowingTextView.h"
- #import "UIView+NIM.h"
- #import "UIImage+NIMKit.h"
- #import "NIMInputBarItemType.h"
- #define leftSpacing 15.0
- @interface YOUPAINIMInputToolBar()<NIMGrowingTextViewDelegate>
- @property (nonatomic,copy) NSArray<NSNumber *> *types;
- @property (nonatomic,copy) NSDictionary *dict;
- @property (nonatomic,strong) YOUPAINIMGrowingTextView *inputTextView;
- @property (nonatomic,assign) NIMInputStatus status;
- @end
- @implementation YOUPAINIMInputToolBar
- - (instancetype)initWithFrame:(CGRect)frame{
- self = [super initWithFrame:frame];
- if (self) {
- [self setBackgroundColor:[UIColor whiteColor]];
- _inputTextView = [[YOUPAINIMGrowingTextView alloc] initWithFrame:CGRectZero];
- _inputTextView.font = [UIFont systemFontOfSize:14.0f];
- _inputTextView.maxNumberOfLines = 4;
- _inputTextView.minNumberOfLines = 1;
- _inputTextView.textColor = LZ273145Color;
- _inputTextView.backgroundColor = LZF7F8FAColor;
- _inputTextView.layer.cornerRadius = 16.75f;
- _inputTextView.nim_size = [_inputTextView intrinsicContentSize];
- _inputTextView.textViewDelegate = self;
- _inputTextView.returnKeyType = UIReturnKeySend;
-
- self.types = @[
- @(NIMInputBarItemTypeVoice),
- @(NIMInputBarItemTypeTextAndRecord),
- @(NIMInputBarItemTypeEmoticon),
- @(NIMInputBarItemTypeMore),
- ];
- //修改inputview 按钮 注释 by leo
- self.recordBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [self.recordBtn setImage:[UIImage imageNamed:@"vqu_images_IM_im_record"] forState:UIControlStateNormal];
- [self.recordBtn setImage:[UIImage imageNamed:@"vqu_images_IM_im_record"] forState:UIControlStateSelected];
- [self.recordBtn sizeToFit];
-
- // self.cameraBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- // [self.cameraBtn setImage:[UIImage imageNamed:@"vqu_images_IM_im_camera"] forState:UIControlStateNormal];
- // [self.cameraBtn sizeToFit];
-
- self.sayHiBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [self.sayHiBtn setImage:[UIImage imageNamed:@"vqu_images_IM_im_sayhi"] forState:UIControlStateNormal];
- [self.sayHiBtn sizeToFit];
-
- self.photoBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [self.photoBtn setImage:[UIImage imageNamed:@"vqu_images_IM_photo"] forState:UIControlStateNormal];
- [self.photoBtn sizeToFit];
-
- self.emoticonBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [self.emoticonBtn setImage:[UIImage imageNamed:@"vqu_images_IM_emoji"] forState:UIControlStateNormal];
- [self.emoticonBtn setImage:[UIImage imageNamed:@"vqu_images_IM_emoji"] forState:UIControlStateSelected];
- [self.emoticonBtn sizeToFit];
-
- self.giftBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [self.giftBtn setImage:[UIImage imageNamed:@"vqu_images_IM_gift"] forState:UIControlStateNormal];
- [self.giftBtn sizeToFit];
-
- self.videoBtn = [UIButton buttonWithType:UIButtonTypeCustom];
- [self.videoBtn setImage:[UIImage imageNamed:@"vqu_images_IM_video1"] forState:UIControlStateNormal];
- [self.videoBtn sizeToFit];
-
- [self addSubview:_inputTextView];
- [self addSubview:self.recordBtn];
- // [self addSubview:self.cameraBtn];
- [self addSubview:self.sayHiBtn];
- [self addSubview:self.photoBtn];
- [self addSubview:self.emoticonBtn];
- [self addSubview:self.giftBtn];
- [self addSubview:self.videoBtn];
- }
- return self;
- }
- - (void)setInputBarItemTypes:(NSArray<NSNumber *> *)types{
- self.types = types;
- [self setNeedsLayout];
- }
- - (NSString *)contentText
- {
- return self.inputTextView.text;
- }
- - (void)setContentText:(NSString *)contentText
- {
- self.inputTextView.text = contentText;
- }
- - (NSArray *)inputBarItemTypes
- {
- return self.types;
- }
- - (CGSize)sizeThatFits:(CGSize)size
- {
- CGFloat viewHeight = 0.0f;
- if (self.status == NIMInputStatusAudio) {
- viewHeight = 70;
- }else{
- //算出 TextView 的宽度
- [self adjustTextViewWidth:size.width];
- // TextView 自适应高度
- if([NSThread isMainThread]){
- [self.inputTextView layoutIfNeeded];
- }else{
- dispatch_async(dispatch_get_main_queue(),^{
- [self.inputTextView layoutIfNeeded];
- });
- }
- viewHeight = self.inputTextView.frame.size.height;
- //得到 ToolBar 自身高度
- viewHeight = viewHeight +44+10;
- // viewHeight = 84;
- }
-
- return CGSizeMake(size.width,viewHeight);
- }
- - (void)adjustTextViewWidth:(CGFloat)width
- {
- // CGFloat textViewWidth = 0;
- // for (NSNumber *type in self.types) {
- // if (type.integerValue == NIMInputBarItemTypeTextAndRecord) {
- // continue;
- // }
- // UIView *view = [self subViewForType:type.integerValue];
- // textViewWidth += view.nim_width;
- // }
- // textViewWidth += (self.spacing * (self.types.count + 1));
- self.inputTextView.nim_width = self.nim_width - (leftSpacing + 5.0f + 23.0f) * 2;
- }
- - (void)layoutSubviews{
- [super layoutSubviews];
- CGFloat bottomGap = -16;
- CGFloat size = 23.0f;//35;
-
-
- [_inputTextView makeConstraints:^(MASConstraintMaker *make) {
- make.left.equalTo(self.recordBtn.mas_right).mas_equalTo(5.0f);
- make.top.mas_equalTo(5);
- make.bottom.mas_equalTo(-(5+44));
- make.right.equalTo(self.emoticonBtn.mas_left).mas_equalTo(-5.0f);
- }];
-
-
- [self.recordBtn makeConstraints:^(MASConstraintMaker *make) {
- make.left.mas_equalTo(leftSpacing);
- make.centerY.mas_equalTo(self->_inputTextView);
- make.size.mas_equalTo(CGSizeMake(size, size));
- }];
-
- [self.emoticonBtn makeConstraints:^(MASConstraintMaker *make) {
- make.right.offset(-leftSpacing);
- make.centerY.mas_equalTo(self->_inputTextView);
- make.size.mas_equalTo(CGSizeMake(size, size));
- }];
-
- NSArray <UIButton *> *footBtns = @[self.photoBtn,self.videoBtn,self.giftBtn,self.sayHiBtn];
-
- CGFloat midSpacing = (self.nim_width - (size * footBtns.count)) / footBtns.count;
- [footBtns mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedSpacing:midSpacing leadSpacing:midSpacing / 2 tailSpacing:midSpacing / 2];
- [footBtns mas_makeConstraints:^(MASConstraintMaker *make) {
- make.bottom.offset(bottomGap);
- make.height.offset(size);
- }];
- // [self.cameraBtn makeConstraints:^(MASConstraintMaker *make) {
- // make.left.equalTo(self.recordBtn.right).offset(midSpacing);
- // make.bottom.mas_equalTo(bottomGap);
- // make.size.mas_equalTo(CGSizeMake(size, size));
- // }];
- // [self.photoBtn makeConstraints:^(MASConstraintMaker *make) {
- // make.left.equalTo(self.cameraBtn.right).offset(midSpacing);
- // make.bottom.mas_equalTo(bottomGap);
- // make.size.mas_equalTo(CGSizeMake(size, size));
- // }];
- //
- // [self.giftBtn makeConstraints:^(MASConstraintMaker *make) {
- // make.left.equalTo(self.emoticonBtn.right).offset(midSpacing);
- // make.bottom.mas_equalTo(bottomGap);
- // make.size.mas_equalTo(CGSizeMake(size, size));
- // }];
- // [self.videoBtn makeConstraints:^(MASConstraintMaker *make) {
- // make.left.equalTo(self.giftBtn.right).offset(midSpacing);
- // make.bottom.mas_equalTo(bottomGap);
- // make.size.mas_equalTo(CGSizeMake(size, size));
- // }];
-
- // [self.superview layoutIfNeeded];
- // [LCTools clipCorner:UIRectCornerTopLeft|UIRectCornerTopRight View:self size:CGSizeMake(20.0f, 20.0f)];
- }
- - (void)adjustTextAndRecordView
- {
- // if ([self.types containsObject:@(NIMInputBarItemTypeTextAndRecord)])
- // {
- // self.inputTextView.center = self.inputTextBkgImage.center;
- //
- // if (!self.inputTextView.superview)
- // {
- // //输入框
- // [self addSubview:self.inputTextView];
- // }
- // if (!self.recordButton.superview)
- // {
- // //中间点击录音按钮
- // self.recordButton.frame = self.inputTextBkgImage.frame;
- // [self addSubview:self.recordButton];
- // }
- // }
- }
- - (BOOL)showsKeyboard
- {
- return [self.inputTextView isFirstResponder];
- }
- - (void)setShowsKeyboard:(BOOL)showsKeyboard
- {
- if (showsKeyboard)
- {
- [self.inputTextView becomeFirstResponder];
- }
- else
- {
- [self.inputTextView resignFirstResponder];
- }
- }
- - (void)update:(NIMInputStatus)status
- {
- self.status = status;
- [self sizeToFit];
-
- if (status == NIMInputStatusText || status == NIMInputStatusMore)
- {
- [self.recordButton setHidden:YES];
- [self.inputTextView setHidden:NO];
- [self.inputTextBkgImage setHidden:NO];
- [self updateVoiceBtnImages:YES];
- [self updateEmotAndTextBtnImages:YES];
- }
- else if(status == NIMInputStatusAudio)
- {
- [self.recordButton setHidden:NO];
- [self.inputTextView setHidden:YES];
- [self.inputTextBkgImage setHidden:YES];
- [self updateVoiceBtnImages:NO];
- [self updateEmotAndTextBtnImages:YES];
- }
- else
- {
- [self.recordButton setHidden:YES];
- [self.inputTextView setHidden:NO];
- [self.inputTextBkgImage setHidden:NO];
- [self updateVoiceBtnImages:YES];
- [self updateEmotAndTextBtnImages:NO];
- }
- }
- - (void)updateVoiceBtnImages:(BOOL)selected
- {
- // [self.voiceBtn setImage:selected?[UIImage imageNamed:@"vqu_images_IM_voice"]:[UIImage imageNamed:@"im_keyboard"] forState:UIControlStateNormal];
- // [self.voiceBtn setImage:selected?[UIImage imageNamed:@"vqu_images_IM_voice"]:[UIImage imageNamed:@"im_keyboard"] forState:UIControlStateHighlighted];
- }
- - (void)updateEmotAndTextBtnImages:(BOOL)selected
- {
- // [self.emoticonBtn setImage:selected?[UIImage imageNamed:@"im_emoji"]:[UIImage imageNamed:@"im_keyboard"] forState:UIControlStateNormal];
- // [self.emoticonBtn setImage:selected?[UIImage imageNamed:@"im_emoji"]:[UIImage imageNamed:@"im_keyboard"] forState:UIControlStateHighlighted];
- }
- #pragma mark - NIMGrowingTextViewDelegate
- - (BOOL)youpaifshouldChangeTextInRange:(NSRange)range replacementText:(NSString *)replacementText
- {
- BOOL should = YES;
- if ([self.delegate respondsToSelector:@selector(youpaifshouldChangeTextInRange:replacementText:)]) {
- should = [self.delegate youpaifshouldChangeTextInRange:range replacementText:replacementText];
- }
- return should;
- }
- - (BOOL)textViewShouldBeginEditing:(YOUPAINIMGrowingTextView *)growingTextView
- {
- BOOL should = YES;
- if ([self.delegate respondsToSelector:@selector(textViewShouldBeginEditing)]) {
- should = [self.delegate textViewShouldBeginEditing];
- }
- return should;
- }
- - (void)textViewDidEndEditing:(YOUPAINIMGrowingTextView *)growingTextView
- {
- if ([self.delegate respondsToSelector:@selector(textViewDidEndEditing)]) {
- [self.delegate textViewDidEndEditing];
- }
- }
- - (void)textViewDidChange:(YOUPAINIMGrowingTextView *)growingTextView
- {
- if ([self.delegate respondsToSelector:@selector(textViewDidChange)]) {
- [self.delegate textViewDidChange];
- }
- }
- - (void)youpaifwillChangeHeight:(CGFloat)height
- {
- CGFloat toolBarHeight = height + 10+44;
- if ([self.delegate respondsToSelector:@selector(youpaiftoolBarWillChangeHeight:)]) {
- [self.delegate youpaiftoolBarWillChangeHeight:toolBarHeight];
- }
- }
- - (void)youpaifdidChangeHeight:(CGFloat)height
- {
- self.nim_height = height + 10+44;
- if ([self.delegate respondsToSelector:@selector(youpaiftoolBarDidChangeHeight:)]) {
- [self.delegate youpaiftoolBarDidChangeHeight:self.nim_height];
- }
- }
- #pragma mark - Get
- - (UIView *)subViewForType:(NIMInputBarItemType)type{
- if (!_dict) {
- _dict = @{
- @(NIMInputBarItemTypeVoice) : self.voiceBtn,
- @(NIMInputBarItemTypeTextAndRecord) : self.inputTextBkgImage,
- @(NIMInputBarItemTypeEmoticon) : self.emoticonBtn,
- @(NIMInputBarItemTypeMore) : self.moreMediaBtn
- };
- }
- return _dict[@(type)];
- }
- - (CGFloat)spacing{
- return 0.f;
- }
- - (CGFloat)textViewPadding
- {
- return 0.f;
- }
- @end
- @implementation YOUPAINIMInputToolBar(InputText)
- - (NSRange)selectedRange
- {
- return self.inputTextView.selectedRange;
- }
- - (void)setPlaceHolder:(NSString *)placeHolder
- {
- NSString* str ;
- if(placeHolder){
- str = placeHolder;
- }else{
- str = @"";
- }
- self.inputTextView.placeholderAttributedText = [[NSAttributedString alloc] initWithString:str attributes:@{NSForegroundColorAttributeName:[UIColor lightGrayColor],NSFontAttributeName:[UIFont systemFontOfSize:14]}];
- }
- - (void)insertText:(NSString *)text
- {
- NSRange range = self.inputTextView.selectedRange;
- NSString *replaceText = [self.inputTextView.text stringByReplacingCharactersInRange:range withString:text];
- range = NSMakeRange(range.location + text.length, 0);
- self.inputTextView.text = replaceText;
- self.inputTextView.selectedRange = range;
- }
- - (void)deleteText:(NSRange)range
- {
- NSString *text = self.contentText;
- if (range.location + range.length <= [text length]
- && range.location != NSNotFound && range.length != 0)
- {
- NSString *newText = [text stringByReplacingCharactersInRange:range withString:@""];
- NSRange newSelectRange = NSMakeRange(range.location, 0);
- [self.inputTextView setText:newText];
- self.inputTextView.selectedRange = newSelectRange;
- }
- }
- @end
|