关于键盘遮挡tableview中的textfield问题,偶然发现新方法

因项目需求,一个页面中有十几个输入框用于提交。每个cell样式都一样,直接一个cell就实现。
上方的输入框点击后键盘不会遮挡,下方的会遮挡,一开始也是像网上说得那样,设置tableview的偏移,但输入完后必须点击完成或者别的地方收缩键盘,才可下次输入,且tabelview不可滚动。
我先解决键盘不能滚动的问题,就不用tableview的偏移,直接缩小tableview的高度,让tableview的高度变为原来的高度减去键盘的高度。这样在键盘上方的tableview也能滑到底部且不会被键盘遮挡,这里用键盘出现消失的通知不再多说。
不可滚动解决了,开始解决偏移,又尝试了获取cell在tableview中的坐标位置,偏移到那一点,效果是实现了,但是不是在键盘正上方,效果不理想。
之后就把代码删了,只剩缩小tableview高度了,一运行,哎?被遮挡的textfield自动便宜到键盘之上了,检查代码,就只有两点,一个是textfield 加了个事件,是开始编辑事件,在事件里将当前的textfield设为第一响应者,之后键盘弹出缩小tableview高度。
代码

[textfield addTarget:self action:@selector(beginedit:) forControlEvents:UIControlEventEditingDidBegin];

-(void)beginedit:(UITextField*)textfield{
     [textfield becomeFirstResponder];
}

-(void)keyBoardWasShowd:(NSNotification*)keyboardNotification{
    NSDictionary*info=[keyboardNotification userInfo];
    CGSize keyboardSize=[[info objectForKey:UIKeyboardFrameEndUserInfoKey]CGRectValue].size;
    CGRect begin = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
    CGRect end = [[[keyboardNotification userInfo] objectForKey:UIKeyboardFrameEndUserInfoKey] CGRectValue];
    
//获取不同的键盘高度,取最后显示的键盘高度作为当前键盘
if(begin.size.height>0 && (begin.origin.y-end.origin.y>0)){
   [UIView animateWithDuration:0.2 animations:^{
   self.tableView.frame=CGRectMake(0,_tableView.frame.origin.y,Screen_Width,Screen_Height-64-keyboardSize.height);
    }];
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 12,198评论 4 61
  • 研究生即将毕业的前一年,自己找公司实习,去面试时发现公司老板加员工共5个人。象征性的测试之后,老板让我去他办公室面...
    素心绽阅读 611评论 14 12
  • 曾几何时,乔布斯对我们心灵上的震撼,就是一句话,原来像他这样的奇葩也有春天!后来看到仿佛人生开挂的埃隆.马斯克,心...
    通灵半藏阅读 245评论 0 1
  • 云鹤欲下山院门,水仙早居此地深。蓝蝶无意草颖颖,碧空有情雨纷纷。地头冷,天边温,一帘秋梦谁铺陈?皓月落入湖...
    abe4c0570901阅读 248评论 0 2