zoukankan      html  css  js  c++  java
  • 从一个子视图或者一个View中刷新其他UITableView

    被问到了一个问题:如何从一个子视图或者一个View中刷新其他UITableView,常规的写法可能是这样的

    TestTVC*testTVC =[[TestTVC alloc] init];
    [testTVC loadData];

    这时你可以看看UITableView是不会被刷新的,起码cellForRowAtIndexPath是不会运行的,为什么呢?因为对TestTVC这样init实际是重新init了一个TestTVC,而loadData不会对已有的TestTVC有作用的。但是loadData方法中如果有API的数据操作这个是会成功的。但是并不会重新渲染tableview。

    看到网上2个最普遍的答案是:

    1. `[self.tableView reloadRowsAtIndexPaths:[self.tableView indexPathsForVisibleRows] withRowAnimation:UITableViewRowAnimationNone];`这也是不行的,任何涉及刷新view的操作都是不会成功的,尽管它比self.tableView reloaddata好一些可以让 `cellForRowAtIndexPath` 有反应了,但是依然刷新不了数据。

    2.  主线程调用,`[testTVC performSelectorOnMainThread:@selector(loadData) withObject:nil waitUntilDone:NO];` 依然只会更新数据不会刷新视图

    解决方案是使用通知:

    [[NSNotificationCenter defaultCenter] postNotificationName:RELOAD_DATA object:self];

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(loadData) name:RELOAD_DATA object:nil];

    —EOF— 

  • 相关阅读:
    node 父子进程传递对象
    js 按照字母进行分组
    native react 代码智能提示
    VScode 使用emmet
    c# webapi swagger
    c# 前台和后台线程
    Java——字节和字符的区别
    Java——类的访问修饰符
    Java——面向对象
    Java——内存中的数组
  • 原文地址:https://www.cnblogs.com/buro79xxd/p/4299989.html
Copyright © 2011-2022 走看看