iOS 채 팅 입력 상자 기능 구현

5409 단어 ios입력 상자
위 챗 채 팅 을 자주 사용 하면 일이 없 으 면 입력 상자 의 실현 과정 을 생각 하기 때문에 시간 을 내 서 입력 상자 의 기능 도 실현 합 니 다.


포장 을 통 해 사용 하 는 것 은 매우 간단 합 니 다.필요 한 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
입력 줄 수 를 설정 하고 입력 상자 의 내용 이 변 할 때 입력 항목 의 높이 를 변경 합 니 다.
DKSKeyboard View.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 를 참고 할 수 있 고 그 안에 상세 한 주석 이 있다.
DKSKeyboard View.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 View Cell 의 고도 적응 을 하지 않 았 습 니 다.
2.입력 상자 문안 이 많 을 때 tableViewCell 이 어 지 러 울 수 있 습 니 다.처리 되 지 않 았 습 니 다.
demo 에서 만약 에 문제 가 있 으 면 여러분 의 댓 글 이 벽돌 을 치 는 것 을 환영 합 니 다.동생 은 반드시 정정 하고 공동으로 공부 하 겠 습 니 다.
GitHub 주소
총결산
위 에서 말씀 드 린 것 은 편집장 님 께 서 소개 해 주신 iOS 채 팅 입력 상자 기능 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!

좋은 웹페이지 즐겨찾기