iOS刷新tableView页面的坑

最近做一个tableView的页面,其中的textfield控件,每次刚进入页面时第一次点击就会自动调用- (void)textFieldDidEndEditing:(UITextField *)textField,但是加载后等待约3秒再点击,即正常。

  • 1、原因分析:既然调用了该代理,那么肯定是点击的textfield失去了第一响应,但是我没有进行任何操作,那么肯定是自动调用的方法导致其失去了第一响应;在tableView中应用最多的是自动调用是[self.tableView reloadData]和网络请求成功后的block内的方法,那么从这两个角度入手。
  • 2、解决思路:屏蔽掉页面中的[self.tableView reloadData]方法,重新运行测试,没有之前的现象;逐个打开测试,发现是在网络加载完毕后刷新页面,textfield刷新,导致失去焦点,自动调用代理。
  • 3、解决方法:我当前的页面在网络请求成功后,只需要刷新其中的一行,那么可以用另一个方法代替[self.tableView reloadData]即可。
[self.tableView reloadRowsAtIndexPaths:
@[[NSIndexPath indexPathForRow:0 inSection:1]]
withRowAnimation:UITableViewRowAnimationNone];

相关方法说明:
//tableView的对象方法,刷新传入的数组内的indexPath行
- (void)reloadRowsAtIndexPaths:(NSArray *)indexPaths
withRowAnimation:(UITableViewRowAnimation)animation ;

//根据传入的section和row获取indexPath
@interface NSIndexPath (UITableView)
+ (instancetype)indexPathForRow:(NSInteger)row
inSection:(NSInteger)section;

注意:出现这个问题的另一个重要原因是,我当前调用的网络请求方法,没有加载合适的Loading(老大封装的公用方法),导致页面reload时仍可以点击 textfield 。

问题完美解决... ...

你可能感兴趣的:(iOS刷新tableView页面的坑)