最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS中表單列表樣式鍵盤遮擋的解決方案

 更新時間:2019年01月08日 09:07:01   作者:不死鳥fj  
這篇文章主要給大家介紹了關(guān)于iOS中表單列表樣式鍵盤遮擋的解決方案,文中通過示例代碼將解決的方法一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面來一起看看吧

前言

近期參與了一個招聘類app的開發(fā),注冊流程比較多,基本都是cell帶輸入框的表單列表樣式,避免不了的就會遇到鍵盤遮擋問題。相信大家也一定遇到過類似的問題,今天在這里就給大家分享一下,這個問題的解決思路。

實現(xiàn)方案

我們先來分析一下這個需求,首先,這個表單是一個列表list(UITableView或者UICollectionView),如圖1所示,當用戶點擊輸入框1、2、3、4、5的時候,彈出鍵盤但不會被遮擋,這種情況,不用做處理,當用戶點擊輸入框6、7、8,彈出鍵盤會遮擋輸入框,想要讓輸入框顯示出來,我們有兩個辦法,第一可以向上修改整個列表view的frame的y值,第二可以修改列表的contentoffset的y值,都可以達到效果,下邊我們選擇第二種方式來實現(xiàn)我們的需求。

具體實現(xiàn)分以下幾步:

  • 監(jiān)聽鍵盤彈起和收起事件
  • 計算鍵盤高度
  • 計算contentoffset的y值要改變的差值并修改contentoffset的值
  • 滑動列表時收起鍵盤
  • 鍵盤收起時還原contentoffset的值


圖1

下面一起來通過代碼實現(xiàn)這個5步

第一步__設(shè)置監(jiān)聽

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

第二步__計算高度

// 鍵盤監(jiān)聽事件
- (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所示

圖2

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

圖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

// 鍵盤監(jiān)聽事件
- (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的值

// 鍵盤監(jiān)聽事件
- (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]) {
  //鍵盤出現(xiàn)時
 } else {
  //鍵盤收起時
  //根據(jù)self.delta復原
  self.collectionView.contentOffset = CGPointMake(0, self.collectionView.contentOffset.y-self.delta);
  self.delta = 0
 }
}

實現(xiàn)完畢,怎么樣,是不是很簡單~~~~~

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

  • IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    IOS 中UITextField和UITextView中字符串為空和空格的解決辦法

    這篇文章主要介紹了IOS 中UITextField和UITextView中字符串為空和空格的解決辦法的相關(guān)資料,需要的朋友可以參考下
    2017-07-07
  • IOS開發(fā)網(wǎng)絡(luò)篇—Socket編程詳解

    IOS開發(fā)網(wǎng)絡(luò)篇—Socket編程詳解

    這篇文章主要介紹了IOS開發(fā)網(wǎng)絡(luò)篇—Socket編程的相關(guān)資料,需要的朋友可以參考下
    2016-09-09
  • 淺談IOS屏幕刷新ADisplayLink

    淺談IOS屏幕刷新ADisplayLink

    CADisplayLink是一個能讓我們以和屏幕刷新率相同的頻率將內(nèi)容畫到屏幕上的定時器。本文將介紹它的使用,感興趣的同學,可以參考下。
    2021-06-06
  • iOS實現(xiàn)圓角箭頭矩形的提示框

    iOS實現(xiàn)圓角箭頭矩形的提示框

    不知道大家發(fā)現(xiàn)了沒,在現(xiàn)在的很多App中常使用圓角箭頭矩形, 如微博分組提示框, 地圖坐標顯示點等。iPad 中有 UIPopoverController 類供開發(fā)使用, iPhone中就需要開發(fā)人員定制了。那么下面這篇文中就來聊聊定制圓角箭頭矩形提示框,有需要的朋友們可以參考借鑒。
    2016-11-11
  • iOS tableView實現(xiàn)下拉圖片放大效果

    iOS tableView實現(xiàn)下拉圖片放大效果

    這篇文章主要為大家詳細介紹了iOS tableView實現(xiàn)下拉圖片放大效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • iOS-GCD詳解及簡單使用

    iOS-GCD詳解及簡單使用

    這篇文章主要介紹了iOS-GCD詳解的相關(guān)資料,并附簡單的實例代碼,幫助大家學習理解此部分的知識,需要的朋友可以參考下
    2016-11-11
  • Swift Self詳解及簡單實例代碼

    Swift Self詳解及簡單實例代碼

    這篇文章主要介紹了Swift Self詳解及簡單實例代碼的相關(guān)資料,這里對self 進行了詳細介紹并附實例代碼,需要的朋友可以參考下
    2016-12-12
  • iOS實現(xiàn)簡單的二級菜單效果

    iOS實現(xiàn)簡單的二級菜單效果

    這篇文章給大家主要介紹的是利用iOS如何實現(xiàn)簡單的菜單效果,文中給出了詳細的示例代碼,而且實現(xiàn)的比較簡單,適合新人學習使用。感興趣的朋友們可以參考借鑒,下面來一起看看吧。
    2016-10-10
  • iOS仿郵箱大師的九宮格手勢密碼解鎖

    iOS仿郵箱大師的九宮格手勢密碼解鎖

    這篇文章主要為大家詳細介紹了iOS仿郵箱大師的手勢密碼解鎖的相關(guān)資料,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-04-04
  • iOS獲取圖片區(qū)域主色的方法

    iOS獲取圖片區(qū)域主色的方法

    這篇文章主要為大家詳細介紹了iOS獲取圖片區(qū)域主色的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06

最新評論

通江县| 福泉市| 天津市| 宁安市| 太康县| 武平县| 油尖旺区| 青冈县| 南乐县| 灵丘县| 新乡市| 青冈县| 灵宝市| 革吉县| 舒城县| 茌平县| 清新县| 揭西县| 祁阳县| 墨竹工卡县| 鲁甸县| 南江县| 类乌齐县| 凤翔县| 雷山县| 庆城县| 贺州市| 新蔡县| 安图县| 聂荣县| 芦溪县| 太谷县| 高淳县| 邵阳市| 罗平县| 临洮县| 辽中县| 阳江市| 崇礼县| 揭东县| 三台县|