iOS 键盘遮挡输入框万能解决方案(多个输入框)
- 效果圖如下:
- 思路分析:
- 代碼:
- 知識點:
- 問題:
效果圖如下:
思路分析:
當我們有很多輸入框時,有時候鍵盤彈出來會遮擋著輸入框。我們需要獲取輸入框和鍵盤相對于最外層視圖的位置來判斷是否遮擋,如果遮擋了計算出遮擋的高度,然后設置最外層視圖的frame,往上移動到大于等于遮擋遮住的高度即可。當鍵盤隱藏是在講最外層視圖的frame還原回來。
代碼:
Main.storyboard如下所示:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
知識點:
1.當輸入框將要編輯時會調- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField代理方法(本為用的都是UITextField),此時用一個全局變量firstResponderTextF來記錄將要編輯的輸入框。(好處就是如果很多輸入框是局部變量一個個獲取會比較麻煩,用一個全局變量來記錄就會簡單方便的多);
2. 鍵盤展示和隱藏的通知:UIKeyboardWillShowNotification,UIKeyboardWillHideNotification;可以獲得鍵盤的frame和動畫時長;通過計算鍵盤和輸入框相對于最外層是視圖的外置來判斷是否被哲哲,如果遮住則間整體視圖網上移動大于等于遮住的高度,當鍵盤隱藏的時候則還原來的位置;
對應的key:UIKeyboardFrameEndUserInfoKey鍵盤frame,UIKeyboardAnimationDurationUserInfoKey展示和影藏的動畫時長;
3.相對于摸個視圖位置的api(UIView):
- 1
- 2
- 3
- 4
問題:
如文中獲取將要編輯的輸入框相對于最外層視圖的fameCGRect rect = [self.firstResponderTextF.superview convertRect:self.firstResponderTextF.frame toView:self.view];(這里其實應該算兩次:要先獲得輸入框在父視圖(紅色或藍色的view)中的位置來獲得相對父視圖的俯視圖(黃色的view)的位置;然后才能獲得輸入框相對于最外層視圖(白色的view),但文我直接用輸入框在父視圖(紅色或藍色的view)中的位置獲得到了相對于最外層view(白色的view)的位置,并且結果正確,所以有些困惑,有理解的大神煩請指點一二);
原碼:iOS 鍵盤遮擋輸入框萬能解決方案(多個輸入框)
轉載于:https://www.cnblogs.com/Free-Thinker/p/9371662.html
總結
以上是生活随笔為你收集整理的iOS 键盘遮挡输入框万能解决方案(多个输入框)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: CSU - 2059 Water Pro
- 下一篇: Scipy的应用