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 채 팅 입력 상자 기능 입 니 다.여러분 께 도움 이 되 셨 으 면 좋 겠 습 니 다.궁금 한 점 이 있 으 시 면 메 시 지 를 남 겨 주세요.편집장 님 께 서 바로 답 해 드 리 겠 습 니 다.여기 서도 저희 사이트 에 대한 여러분 의 지지 에 감 사 드 립 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Swift의 패스트 패스Objective-C를 대체하기 위해 만들어졌지만 Xcode는 Objective-C 런타임 라이브러리를 사용하기 때문에 Swift와 함께 C, C++ 및 Objective-C를 컴파일할 수 있습니다. Xcode는 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.