国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > iOS > 正文

iOS實現聊天輸入框功能

2020-07-26 02:29:38
字體:
來源:轉載
供稿:網友

經常使用微信聊天,沒事兒就會想輸入框的實現過程,所以抽空,也實現了一個輸入框的功能;

經過封裝,使用就非常的簡單了,在需要的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

關于上面的兩個代理方法,由于文章篇幅問題,實現的過程可參考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];  }}

以上就是聊天輸入框的簡單實現,只是提供一個實現思路,如果在聊天界面中接入,還需要處理以下問題:

1、demo中沒有做tableViewCell的高度自適應;

2、輸入框文案較多時,tableViewCell可能會出現紊亂,此處沒有處理

demo中如果有任何問題,歡迎各位留言拍磚,小弟一定更正,共同學習;

GitHub地址

總結

以上所述是小編給大家介紹的iOS實現聊天輸入框功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 山西省| 琼结县| 隆子县| 化德县| 孟津县| 兴安县| 化州市| 同仁县| 昭通市| 金秀| 平果县| 泌阳县| 吐鲁番市| 米泉市| 中江县| 巴林右旗| 文山县| 称多县| 常熟市| 大宁县| 宝山区| 郧西县| 婺源县| 新郑市| 陆河县| 营山县| 青神县| 固始县| 桂平市| 连城县| 即墨市| 松滋市| 寿阳县| 二手房| 苗栗市| 十堰市| 礼泉县| 伊金霍洛旗| 东乌| 石家庄市| 增城市|