在普通视图控制器中创建和填充表视图

时间:2011-06-18 23:08:44

标签: ios json uitableview datasource

我打赌这个问题已被问了一千次,但我找不到一个与我现在遇到的问题直接相关的问题,所以我真的很感谢你们的帮助。这是:

我的iPhone应用程序中有一个视图控制器,当被触发时,会从服务器请求一个JSON字符串。当应用程序收到JSON时,它会被解析,并使用相应的数据填充表视图。在这种情况发生时,我正在显示UIActivityIndicatorView以表明幕后发生了什么。

我可以很好地下载和解析JSON,但是当填充表格视图时,我很丢失。因为我必须显示一个完全白色的视图而不是一个带有活动指示器的空表视图,所以我没有让我的视图控制器成为UITableViewController的子类(默认显示一个空列表)。

如何使用我从服务器下载的数据创建和填充表格视图,如何在没有正常cellForRowAtIndexPath和这些方法的情况下执行此操作?

谢谢!

解决方案

我刚想出如何解决我的问题。当服务器响应返回时,我分配我的表视图,设置其数据源并委托给self,然后通过实现UITableViewController实现的相同方法,用返回的数据填充表视图。请记住,正如@Deepak指出的那样,要在头文件中采用UITableViewDatasourceUITableViewDelegate

1 个答案:

答案 0 :(得分:0)

我不明白为什么你不能使用UITableViewController子类并执行

// Create UIActivityIndicatorView instance
[self.view addSubview:activityIndicatorView];

如果您需要一个空的白色视图,您也可以在此处将其添加为子视图。

因此,如果您有兴趣继续当前的方式。您需要让UIViewController子类采用UITableViewDatasourceUITableViewDelegate协议并实施适当的方法。我不认为你可以使用UITableView而不这样做。

修改

当你取出NIB时,这种行为有很大的不同。如果您将行数更改为偶数1,则叠加层会正确显示。这似乎是一个错误。

我建议你实施loadView来解决这个问题,将self.viewself.tableView分开。

- (void)loadView {
    self.view = [[[UIView alloc] initWithFrame:[[UIScreen mainScreen] applicationFrame]] autorelease];
    self.tableView = [[[UITableView alloc] initWithFrame:self.view.bounds] autorelease];

    self.tableView.dataSource = self;
    self.tableView.delegate = self;
}