遇到的问题:
产品设计了一个功能UITableViewCell中的一个UITextField的数字键盘,效果是每次输入数字后使执row的cell上面的数字跟输入的数字相乘,然后动态实时计算并展示出联动计算的结果。我在刷新整个表视图,这里使用了reloadData,会出现每输入一个数字就收回键盘不能连续输入的问题。
原因:
系统的reloadData和reloadRowsAtIndexPaths在执行的时候如果发现有的UITableView的子视图(例如这里的cell)有键盘已弹出正在响应(isFirstResponder),就会收起该键盘(resignFirstResponder)。
一种处理方法
方法一:我舍弃了reloadData方法,改用了指定行刷新的办法,让需要动态展示运算结果的cell 走reloadRowsAtIndexPaths单行刷新。这样就键盘就不会收起来了。可以连续输入。
方法二:也可以有键盘的cell自己来做控件显示更新,其他的cell刷新走reloadRowsAtIndexPaths。获取可见cell坐标数组(indexPathsForVisibleRows)剔除那个有键盘的IndexPath。