iOS中输入文字时自动上/下移TableView完美方法

当我们需要处理键盘事件, 如登录或者输入信息的页面, 会让tableView向上移动, 以至于不让键盘挡住输入框。 这样做能提升用户体验。 同理ScrolView, TextField/TextView等, 本文主要记录几种解决办法。


方法一: 监听TextField/TextView的代理事件

主要代码如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#pragma mark - textField delegate
- (void)textFieldDidBeginEditing:(UITextField *)textField {
[self animateTextField:textField up:YES];
}
- (void)textFieldDidEndEditing:(UITextField *)textField {
[self animateTextField:textField up:NO];
}
//移位
- (void) animateTextField:(UITextField*)textField up: (BOOL) up{
//假设y 抽上移100.
const int movementDistance = 100;
const float movementDuration = 0.3f;
int movement = (up ? -movementDistance : movementDistance);
[UIView animateWithDuration:movementDuration animations:^{
self.tableViewMain.frame = CGRectOffset(self.view.frame, 0, movement);
}];
}

方法一采用整体上移/回移tableView的frame方法.

  • 优点: 对于非采用tableView(ScrollView)布局的页面, 优势非常明显, 简单方便. 如: 登录时, 只需要挪动一固定位置, 达到输入框置顶的效果.
  • 缺点: 很明显, 没有自动获取键盘高度, 无法达到移动键盘高度的大小(键盘高度非固定).

方法二: 监听键盘的弹出与收回通知

方法二采用监听键盘事件, 当键盘弹出时上移tableView底部到键盘顶部, 当键盘收起时将tableView移回.

  • 特点: 灵活性较强.

结语

看实际需求, 如果设计师给的图是普通的登录注册, 用第一种方式, 移动固定大小就搞定; 如果像聊天界面那种需要看到最下面的内容时, 坚决选第二种.

点击下载本文对应代码

转载请注明出处,有疑问欢迎留言!