从另一个类重新加载 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