<acronym id='pgfxj'><em id='pgfxj'></em><td id='pgfxj'><div id='pgfxj'></div></td></acronym><address id='pgfxj'><big id='pgfxj'><big id='pgfxj'></big><legend id='pgfxj'></legend></big></address>

<span id='pgfxj'></span>
        <i id='pgfxj'><div id='pgfxj'><ins id='pgfxj'></ins></div></i>
        <fieldset id='pgfxj'></fieldset>
        <dl id='pgfxj'></dl>

          <i id='pgfxj'></i>

        1. <ins id='pgfxj'></ins>

        2. <tr id='pgfxj'><strong id='pgfxj'></strong><small id='pgfxj'></small><button id='pgfxj'></button><li id='pgfxj'><noscript id='pgfxj'><big id='pgfxj'></big><dt id='pgfxj'></dt></noscript></li></tr><ol id='pgfxj'><table id='pgfxj'><blockquote id='pgfxj'><tbody id='pgfxj'></tbody></blockquote></table></ol><u id='pgfxj'></u><kbd id='pgfxj'><kbd id='pgfxj'></kbd></kbd>

          <code id='pgfxj'><strong id='pgfxj'></strong></code>

            iOS开发:聊天输入框的实现

            • 时间:
            • 浏览:28
            • 来源:124软件资讯网

              经常使用微信谈天  ,没事儿就会想输入框的实现历程  ,以是抽闲  ,也实现了一个输入框的功效;

              经由封装  ,使用就很是的简朴了  ,在需要的VC中  ,实现要领如下:

              - (void)viewDidLoad {
                  [super viewDidLoad];
                  self.view.backgroundColor = [UIColor colorWithRed:0.92 green:0.92 blue:0.92 alpha:1.00];
                  
                  self.keyView = [[DKSKeyboardView alloc] initWithFrame:CGRectMake(0, K_Height - 51, K_Width, 51)];
                  //设置署理要领
                  self.keyView.delegate = self;
                  [self.view addSubview:_keyView];
              }

              主要就是上面的添加  ,此时输入框就已经添加到当前的VC中;稍后会讲到内里的署理要领的作用;

              工程结构如下图

              结构图.png

              主要是红色线标出的两个类 ,结构比力简朴

              类名作用
              DKSKeyboardView结构心情按钮、更多按钮、输入框
              DKSTextView


              设置输入行数  ,输入框内容转变时改变输入款高度


              DKSKeyboardView.h中的代码如下:

              #import @protocol DKSKeyboardDelegate @optional //非必实现的要领
              /**
               点击发送时输入框内的文案
               @param textStr 文案
               */
              - (void)textViewContentText:(NSString *)textStr;
              /**
               键盘的frame改变
               */
              - (void)keyboardChangeFrameWithMinY:(CGFloat)minY;
              @end
              @interface DKSKeyboardView : UIView @property (nonatomic, weak) id delegate;
              @end

              关于上面的两个署理要领 ,由于文章篇幅问题  ,实现的历程可参考demo  ,内里有详细的注释;

              在DKSKeyboardView.m中  ,以下列出少量主要代码 ,主要是改变frame

              1、点击输入框  ,键盘泛起

              //键盘将要泛起
              - (void)keyboardWillShow:(NSNotification *)notification {
                  [self removeBottomViewFromSupview];
                  NSDictionary *userInfo = notification.userInfo;
                  CGRect endFrame = [userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue];
                  //获取键盘的高度
                  self.keyboardHeight = endFrame.size.height;
                  
                  //键盘的动画时长
                  CGFloat duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
                  [UIView animateWithDuration:duration delay:0 options:[notification.userInfo[UIKeyboardAnimationCurveUserInfoKey] integerValue] animations:^{
                      self.frame = CGRectMake(0, endFrame.origin.y - self.backView.height - StatusNav_Height, K_Width, self.height);
                      [self changeTableViewFrame];
                  } completion:nil];
              }

              2、键盘消逝

              - (void)keyboardWillHide:(NSNotification *)notification {
                  //若是是弹出了底部视图时
                  if (self.moreClick || self.emojiClick) {
                      return;
                  }
                  [UIView animateWithDuration:0.25 animations:^{
                      self.frame = CGRectMake(0, K_Height - StatusNav_Height - self.backView.height, K_Width, self.backView.height);
                      [self changeTableViewFrame];
                  }];
              }

              3、点击更多按钮

              - (void)moreBtn:(UIButton *)btn {
                  self.emojiClick = NO; //主要是设置心情按钮为未点击状态
                  if (self.moreClick == NO) {
                      self.moreClick = YES;
                      //接纳键盘
                      [self.textView resignFirstResponder];
                      [self.emojiView removeFromSuperview];
                      self.emojiView = nil;
                      [self addSubview:self.moreView];
                      //改变换多、self的frame
                      [UIView animateWithDuration:0.25 animations:^{
                          self.moreView.frame = CGRectMake(0, self.backView.height, K_Width, bottomHeight);
                          self.frame = CGRectMake(0, K_Height - StatusNav_Height - self.backView.height - bottomHeight, K_Width, self.backView.height + bottomHeight);
                          [self changeTableViewFrame];
                      }];
                  } else { //再次点击更多按钮
                      //键盘弹起
                      [self.textView becomeFirstResponder];
                  }
              }

              4、改变输入框巨细

              - (void)changeFrame:(CGFloat)height {
                  CGRect frame = self.textView.frame;
                  frame.size.height = height;
                  self.textView.frame = frame; //改变输入框的frame
                  //当输入框巨细改变时  ,改变backView的frame
                  self.backView.frame = CGRectMake(0, 0, K_Width, height + (viewMargin * 2));
                  self.frame = CGRectMake(0, K_Height - self.backView.height - self.keyboardHeight, K_Width, self.backView.height);
                  //改变换多按钮、心情按钮的位置
                  self.emojiBtn.frame = CGRectMake(viewMargin, self.backView.height - viewHeight - viewMargin, viewHeight, viewHeight);
                  self.moreBtn.frame = CGRectMake(self.textView.maxX + viewMargin, self.backView.height - viewHeight - viewMargin, viewHeight, viewHeight);
                  //主要是为了改变VC的view的frame
                  if (self.delegate && [self.delegate respondsToSelector:@selector(changeFrameWithMinY:)]) {
                      [self.delegate changeFrameWithMinY:self.minY];
                  }
              }

              以上就是谈天输入框的简朴实现  ,只是提供一个实现思绪 ,若是在谈天界面中接入  ,还需要处置惩罚以下问题: