美文网首页
记一次UI操作小坑及解决方法(UITableView删除、插入崩

记一次UI操作小坑及解决方法(UITableView删除、插入崩

作者: ForKid | 来源:发表于2018-08-10 15:02 被阅读28次

    先说下踩坑的两个地方~

    - (void)insertRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
    - (void)deleteRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation;
    

    涉及到单元格删除和插入操作的时候,一不小心crash了,排查了很久没有找到原因。最后一通神(luan)操作发现了一点头绪 Orz.

    说一下原因吧:

    插入和删除的过程中,并没有执行reload方法,所以每个cell对应的indexPath并没有更新。这个时候继续调用删除或者插入操作,就会出现操作错误,涉及到数组操作的话,就直接崩了~

    解决方法
    1. 每次执行完以后调用
    - (void)reloadData;
    或者
    - (void)reloadRowsAtIndexPaths:(NSArray<NSIndexPath *> *)indexPaths withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
    或者
    - (void)reloadSections:(NSIndexSet *)sections withRowAnimation:(UITableViewRowAnimation)animation NS_AVAILABLE_IOS(3_0);
    

    好处就是不会出错,因为每次刷新后,indexPath都是正确的;坏处嘛~ 就是会一闪闪的。看各位能不能接受咯(手动滑稽)

    2.获取当前cell真正indexPath信息

    讲真,一开始想到这个思路的时候脑洞有点大,大概是这样:先记录一下本次操作的row,下一次操作的时候判断操作的row是不是大于上一次操作时的row,然后巴拉巴拉~~
    。。。。

    不皮了,其实只需要用一个方法 :

    - (nullable NSIndexPath *)indexPathForCell:(UITableViewCell *)cell;   
    

    根据cell来获取对应的indexPath就好了~

    最后:希望对大家有帮助

    相关文章

      网友评论

          本文标题:记一次UI操作小坑及解决方法(UITableView删除、插入崩

          本文链接:https://www.haomeiwen.com/subject/xpnkbftx.html