从另一个类重新加载 iPhone 上的 TableView

Posted

技术标签:

【中文标题】从另一个类重新加载 iPhone 上的 TableView【英文标题】:Reloading TableView on iPhone from another class 【发布时间】:2010-11-30 05:51:23 【问题描述】:

所以我有一个FirstViewController,它是一个UITableViewController,还有delegate和dataSource。它有表格视图。

我有另一个类 FeedParser,它解析数据 - 但在完成解析后,我需要它去刷新 UITableView,否则它不会显示任何内容。

这可能是一个愚蠢的问题,所以请原谅我,但是我应该如何从 FeedParser 调用 FirstViewController 的 tableView.reloadData 呢?

有没有返回该视图的方法?

谢谢!

【问题讨论】:

feedparser 类是什么时候调用的? feedParser 是单独的 viewController 吗? FeedParser 类在加载应用程序时被实例化并从 AppDelegate 调用。 feedParser 本身并不是一个 viewController。 解析后的数据存储在数组中还是什么?那是 tabelView 的数据源吗? 【参考方案1】:

注册视图控制器以接收数据已更改的通知,并在收到通知时刷新表。然后让解析器将其发送出去。

注册很简单:

[[NSNotificationCenter defaultCenter] addObserver:self 
                                         selector:@selector(yourRefreshMethodHere:)
                                             name:@"YourNotificationName"
                                           object:nil];

您的刷新方法需要设置为接收这些通知,大致如下:

- (void)reloadTable:(NSNotification *)notif 
    [self.yourTableName reloadData];

在你的 ViewDidUnload 中停止观察是很重要的:

[[NSNotificationCenter defaultCenter] removeObserver:self];

然后在解析器中,您只需在完成后添加:

[[NSNotificationCenter defaultCenter] postNotificationName:@"YourNotificationName" 
                                                    object:nil];

视图控制器(以及使用该名称观察通知的任何其他人)将收到消息并执行其任务。

【讨论】:

啊,我想到了某种通知方式——我试图通过应用程序委托来实现我自己的,但我不想经常检查一些东西。 这很棒!谢谢! (而且我还不习惯整个输入是提交评论的事情;我打算把它放在一起)。非常感谢!如果可以的话,我会投票赞成,但我没有足够的代表:( 哦,它还帮助我解决了我遇到的其他一些问题。非常感谢! 太好了,很高兴它对你有用。通知也为我打开了大量的解决方案。 (虽然您不能投票,但您可以检查答案旁边的复选标记以表明它解决了您的问题 - 这也将帮助您的代表。) 发现这个解决方案很好......代表凯文投票(他没有代表投票)【参考方案2】:

简单的方法,

在 appDelegate 中为你的FirstViewController 创建一个对象,分配属性并合成它。

在FirstViewController的ViewDidLoad中,

firstViewControllerObj = self;

feedParser.m中,解析完成后的代码如下,

[appDelegate.firstViewControllerObj.tabelView reloadData];

【讨论】:

【参考方案3】:

只需在您的应用委托中存储对 FirstViewController 的引用,然后调用 [appDelegate.firstViewController.tableView reloadData]

【讨论】:

我对此很陌生,但我认为我做不到 - 我没有从应用程序委托加载 FirstViewController。

以上是关于从另一个类重新加载 iPhone 上的 TableView的主要内容,如果未能解决你的问题,请参考以下文章

从另一个视图类重新加载集合视图数据

从另一个 XIB (iPhone) 的视图控制器加载 XIB

防止缓存 iPhone Web 应用程序重新加载(滚动到顶部)

如何从另一个 UIViewController 重新加载 UITableViewController

从另一个 ViewController 重新加载 UIPickerView 的数据

从另一个视图重新加载表视图