iOSはチャット入力ボックス機能を実現します。


WeChatチャットをよく使います。暇があれば、入力ボックスの実現過程を入力したいです。だから、時間を割いて、入力ボックスの機能も実現しました。


パッケージを通して、使用は非常に簡単です。必要な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に添加されました。後で中の代理方法の役割を説明します。
工事の構造は下図のようです。
 
主に赤い線が示す二つの種類で、構造は比較的簡単です。
クラス名
作用
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
上の二つの代理方法について、文章の幅の問題のため、実現の過程はデモを参考にして、中に詳しい注釈があります。
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];
  }
}
以上はチャット入力ボックスの簡単な実現であり、ただ一つの実現構想を提供しています。チャットインターフェースでアクセスするなら、以下の問題を処理する必要があります。
1、demoの中でtable Viewcellの高度適応をしていません。
2、入力ボックスの文案が多い場合、テーブルビューセルが乱れている可能性があります。ここでは処理していません。
デモの中に何か問題があったら、皆さんのメッセージを歓迎します。弟はきっと訂正して、一緒に勉強します。
GitHubアドレス
締め括りをつける
以上は小编でご绍介したiOSでチャット入力ボックスの机能を実现しています。皆さんに何かお聞きしたいことがあれば、メッセージをください。小编はすぐにお返事します。ここでも私たちのサイトを応援してくれてありがとうございます。