美文网首页
在使用MJRefresh情况下,tableVeiw跳转到顶部mj

在使用MJRefresh情况下,tableVeiw跳转到顶部mj

作者: 落痕iOS | 来源:发表于2017-03-29 16:21 被阅读0次

    要想实现在reload之后弹出alertView,或者滚动到特定一行, 也许你会这么写

    [_tableView reloadData];
    [_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated];
    

    看似没问题,但是滚动没起作用,因为reloadData是立即返回的,不会等tableview刷新完成
    解决办法就是要等排队,等tableview的刷新操作完成,再去做滚动等其他操作。
    方法1:

      - (void)performSelector:(SEL)aSelector withObject:(nullable id)anArgument afterDelay:(NSTimeInterval)delay;
    

    这个方法官方的解释有:
    Specifying a delay of 0 does not necessarily cause the selector to be performed immediately. The selector is still queued on the thread’s run loop and performed as soon as possible.

    正好符合咱们的要求。

    - (void)reload{ 
        [_tableView reloadData];
        [self performSelector:@selector(scrollToIndexPath:) withObject:[NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex] afterDelay:0.0];
    }
    - (void)scrollToIndexPath:(NSIndexPath *)path{
       [_tableView scrollToRowAtIndexPath:path atScrollPosition:UITableViewScrollPositionTop animated:YES];
    }
    

    方法2:

      [_tableView reloadData];
      dispatch_async(dispatch_get_main_queue(), ^{
       [_tableView scrollToRowAtIndexPath:[NSIndexPath indexPathForRow:rowIndex inSection:sectionIndex] atScrollPosition:UITableViewScrollPositionTop animated:YES]; 
    });
    

    相关文章

      网友评论

          本文标题:在使用MJRefresh情况下,tableVeiw跳转到顶部mj

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