1、点击控制器的view退出键盘
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[self.view endEditing:YES]; // 结束编辑,就会自动退出键盘
}
2. 评论工具栏随键盘高度上升而上升,随键盘消失而回原底部位置
1. 分析界面:有一个tableView,我们想将该控制器用UITableViewController处理,但是,再观察可得,发现不能如此,为什么呢?
- 不能用tableViewVC,而选择UIViewController,因为,工具栏要求一直显示在底部,但是表格控制器滚动,工具栏也会随着滚动的
- 因为底部有一个评论工具栏(上面有一个UITextView),UITextView叫出键盘后,要求键盘弹出而工具栏要往上移动,随着键盘的消息而显示在控制器view的最底部。
- 选择UIViewController,在控制器的view上添加两个子控件:tableView与工具栏UIView
2. 代码 实现
- 1.自定义控制器JPViewController,通过xib布局,继承UIViewController
- 2.通知,监听键盘frame的通知 ->UIKeyboardWillChangeFrameNotification
- (void)viewDidLoad {
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillChangeFrame:) name:UIKeyboardWillChangeFrameNotification object:nil];
}
- 3.监听了通知,那么就的最后在dealloc方法中,移除通知监听
- (void)dealloc
{
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
#pragma mark - 监听
- (void)keyboardWillChangeFrame:(NSNotification *)note
{
// 工具条平移的距离 == 屏幕高度 - 键盘最终的Y值
self.bottomSpace.constant = JPScreenH - [note.userInfo[UIKeyboardFrameEndUserInfoKey] CGRectValue].origin.y;
CGFloat duration = [note.userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
[UIView animateWithDuration:duration animations:^{
[self.view layoutIfNeeded]; // 修改约束,执行动画,必须重写调整
}];
}