91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS中表單列表樣式鍵盤被遮擋如何解決

發布時間:2021-06-11 17:00:54 來源:億速云 閱讀:145 作者:Leah 欄目:移動開發

這篇文章將為大家詳細講解有關iOS中表單列表樣式鍵盤被遮擋如何解決,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

具體實現分以下幾步:

  • 監聽鍵盤彈起和收起事件

  • 計算鍵盤高度

  • 計算contentoffset的y值要改變的差值并修改contentoffset的值

  • 滑動列表時收起鍵盤

  • 鍵盤收起時還原contentoffset的值

iOS中表單列表樣式鍵盤被遮擋如何解決
圖1

下面一起來通過代碼實現這個5步

第一步__設置監聽

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAction:) name:UIKeyboardWillShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardAction:) name:UIKeyboardWillHideNotification object:nil];

第二步__計算高度

// 鍵盤監聽事件
- (void)keyboardAction:(NSNotification*)sender{
 NSDictionary *useInfo = [sender userInfo];
 NSValue *value = [useInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
 //鍵盤高度
 CGFloat height = [value CGRectValue].size.height;
 if ([sender.name isEqualToString:UIKeyboardWillShowNotification]) {
   //鍵盤彈起時
 } else {
   //鍵盤收起時
 } 
}

第三步__計算contentoffset的y值要改變的差值并修改contentoffset的值

我們以點擊第7個輸入框為例,當點擊第7個輸入框的時候,我們想要的效果是讓第7個輸入框跑到鍵盤上邊,如圖2所示

iOS中表單列表樣式鍵盤被遮擋如何解決

圖2

那么這里我們就要計算一下需要向上移動的距離delta=3-(2-1),2是list的高度,1是鍵盤的高度,3是第7個輸入框所在cell的maxY值-當前list的contentoffset的y值,如圖3,

iOS中表單列表樣式鍵盤被遮擋如何解決

圖3

1和2我們很好獲得,重點是獲取3的值,我們只要獲取到第7個輸入框所在cell的實例,然后通過CGRectGetMaxY(cell.frame)即可獲得此值。下邊是獲取到cell實例的代碼

- (UICollectionViewCell *)firstResponderCell {
 __block UICollectionViewCell *cell = nil;
 [self.collectionView.visibleCells enumerateObjectsUsingBlock:^(__kindof UICollectionViewCell * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  UICollectionViewCell *visibleCell = obj;
  //焦點所在的textField
  if (visibleCell.textField.isFirstResponder) {
   cell = visibleCell;
  }
 }];
 return cell;
}

計算差值改變contentoffset

// 鍵盤監聽事件
- (void)keyboardAction:(NSNotification*)sender{
 NSDictionary *useInfo = [sender userInfo];
 NSValue *value = [useInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
 //鍵盤高度
 CGFloat keyboardHeight = [value CGRectValue].size.height;
 //列表的高度
 CGFloat collectionViewHeight = self.collectionView.frame.size.height;
 if ([sender.name isEqualToString:UIKeyboardWillShowNotification]) {
  //鍵盤彈出時
  //獲取輸入框焦點所在的cell
  UICollectionViewCell *cell = [self firstResponderCell];
  if (cell) {
   //cell的maxY值
   CGFloat cellMaxY = CGRectGetMaxY(cell.frame)- self.collectionView.contentOffset.y;
   //差值 = 3 -(2-1)
   if (cellMaxY > collectionViewHeight-keyboardHeight) {
    //記錄delta值,鍵盤收起恢復原來位置時使用
    self.delta = cellMaxY-(collectionViewHeight-keyboardHeight);
    self.collectionView.contentOffset = CGPointMake(0, self.collectionView.contentOffset.y+self.delta);
   }
  }
 } else {
   //鍵盤收起時
 }
 
}

第四步__滑動列表時收起鍵盤

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
 UICollectionViewCell *cell = [self firstResponderCell];
 if (cell) {
  [cell.textField resignFirstResponder];  
 }
}

第五步__鍵盤收起時還原contentoffset的值

// 鍵盤監聽事件
- (void)keyboardAction:(NSNotification*)sender{
 NSDictionary *useInfo = [sender userInfo];
 NSValue *value = [useInfo objectForKey:UIKeyboardFrameEndUserInfoKey];
 //鍵盤高度
 CGFloat keyboardHeight = [value CGRectValue].size.height;
 //列表的高度
 CGFloat collectionViewHeight = self.collectionView.frame.size.height;
 if ([sender.name isEqualToString:UIKeyboardWillShowNotification]) {
  //鍵盤出現時
 } else {
  //鍵盤收起時
  //根據self.delta復原
  self.collectionView.contentOffset = CGPointMake(0, self.collectionView.contentOffset.y-self.delta);
  self.delta = 0
 }
}

關于iOS中表單列表樣式鍵盤被遮擋如何解決就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

ios
AI

柳林县| 曲沃县| 淮南市| 麻栗坡县| 元谋县| 太康县| 沁源县| 石阡县| 万载县| 宁强县| 沈阳市| 三都| 连城县| 克拉玛依市| 弥渡县| 宜阳县| 太仓市| 上思县| 广西| 灌云县| 武冈市| 治县。| 天峨县| 萨迦县| 仁怀市| 道孚县| 南康市| 长宁区| 南通市| 崇明县| 龙胜| 隆子县| 江油市| 永安市| 海伦市| 襄汾县| 双柏县| 武胜县| 黄龙县| 赣榆县| 六盘水市|