最近项目中购物车添加了商品数量的编辑功能,so问题来了,若我们编辑的商品cell位于tableview上方,那一切ok,但是如果是底部的cell呢,到github上一通找,的确有大牛开源了三方->https://github.com/hackiftekhar/IQKeyboardManager。但是明显大材小用了,下面谈一谈自己的处理
-(BOOL)textFieldShouldBeginEditing:(UITextField*)textField {
//textfield的tag关联的是cell的section和row
NSInteger section = textField.tag/1000;
NSInteger row = textField.tag%1000;
//取出编辑的cell
NSIndexPath *index = [NSIndexPath indexPathForRow:row inSection:section];
UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:index];
//将cell的坐标转化到window上,也可以转换到view上这个随意
UIWindow*win = [UIApplication sharedApplication].keyWindow;
CGRect rect = [win convertRect:CGRectMake(0,0, cell.frame.size.width, cell.frame.size.height)fromView:cell];
DebugLog(@"-----------%f",rect.origin.y);
//算偏移量,216是键盘高度,50是tab高度,严谨一点可以加键盘监听获取高度
CGFloatoffset =APP_H-216-50- rect.origin.y- rect.size.height;
DebugLog(@"-_______--%f",offset);
if(offset <=0) {
[UIView animateWithDuration:0.3animations:^{
CGRect frame =self.view.frame;
DebugLog(@"-----________-----%f",frame.origin.y);
frame.origin.y+= offset;
self.view.frame= frame;
}];
}
return yes;}
编辑结束后在shouldend里面将view还原。
还有一种实现是拿出cell,通过tableview scrolltoindexpath这个方法讲cell可见,但是在textfield resignFirstResponder之后没法回滚,需重新做动画实现。
网友评论