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

首頁 > 系統 > iOS > 正文

iOS實現聊天輸入框功能

2019-10-21 18:41:36
字體:
來源:轉載
供稿:網友

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

ios,聊天,輸入框

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中;稍后會講到里面的代理方法的作用;

工程結構如下圖

ios,聊天,輸入框 

主要是紅色線標出的兩個類,結構比較簡單

 

類名 作用
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實現聊天輸入框功能,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對VEVB武林網網站的支持!


注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 玉龙| 林周县| 九江市| 永德县| 华坪县| 姜堰市| 旬阳县| 新泰市| 汉中市| 宣武区| 罗源县| 肥城市| 平和县| 南陵县| 安化县| 合山市| 老河口市| 永川市| 五家渠市| 高台县| 潼关县| 枣阳市| 福鼎市| 裕民县| 永平县| 临武县| 类乌齐县| 湘潭市| 启东市| 石门县| 洪雅县| 剑川县| 革吉县| 旺苍县| 钦州市| 滁州市| 万源市| 普洱| 吉木萨尔县| 伊吾县| 万安县|