我在填充子类UITableView时遇到问题。
我得到的只是一个空白屏幕。
它已嵌入到UIView
中,UITableViewDelegate
中设置了UITableViewDataSource
和UITableViewController.h
:
TableViewController *tableView = [[TableViewController alloc]
initWithStyle:UITableViewStyleGrouped];
tableView.view.frame = CGRectMake(0.0, 50.0, 320.0,
self.view.bounds.size.height);
tableView.tableView.dataSource = tableView;
tableView.tableView.delegate = tableView;
[self.view addSubview:tableView.view];
然后,在UITableViewController中,我创建了一个虚拟数组,用作数据源:
library = [[NSArray alloc] initWithObjects:
@"Dummy 1",
@"Dummy 2",
@"Dummy 3",
@"Dummy 4", nil];
然后我按原样执行所需的数据源委托方法:
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 2;
}
- (NSInteger)tableView:(UITableView *)tableView
numberOfRowsInSection:(NSInteger)section
{
int rows;
if (section == 0) {
rows = [library count];
}
else if (section == 1) {
rows = 0;
}
return rows;
}
- (NSString *)tableView:(UITableView *)tableView
titleForHeaderInSection:(NSInteger)section {
if(section == 0) {
return [NSString stringWithFormat:@"Missions Library"];
}
else {
return [NSString stringWithFormat:@"Acknowledgements"];
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellId = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId
forIndexPath:indexPath];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellId];
}
cell.textLabel.text = [library objectAtIndex:indexPath.row];
cell.accessoryType = UITableViewCellAccessoryDisclosureIndicator;
return cell;
}
我已经阅读了大量的表格视图教程,我无法弄清楚问题。我没有收到任何错误消息,只是一个空白的表格视图屏幕。
我做错了什么?
一些更新:
如果我不将tableView的视图添加为子视图但直接调用它,我会显示页眉和页脚,但不显示单元格。
根本没有调用cellForRowAtIndexPath方法(我用NSLog检查了它)。这就解释了为什么我没有得到细胞。
整个练习是拥有一个仅占据屏幕下方的分组表格视图。但我的方法可能不是实现这一目标的最佳方法......
答案 0 :(得分:3)
我认为这里的问题是你的库数组正在加载对象,但是UITableView实例本身没有得到通知(通过reloadData)。另外,请记住调用
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellId
forIndexPath:indexPath];
确保您获得一个单元格,因此不需要:
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault
reuseIdentifier:CellId];
}
只要在故事板中正确设置了标识符。
我可能错了,但我需要知道数据填充的位置。
答案 1 :(得分:2)
看起来你错过了[self.tableView reloadData]。
此外,如果您支持ios 6.0+,请使用方法
registerClass:forCellReuseIdentifier:
当您设置UITableView时。这将确保
dequeueReusableCellWithIdentifier
返回一个单元格,而不是nil,因此您不必执行if(cell == nil)检查。
答案 2 :(得分:2)
如果你将一个tableview添加到UIViewController,你想要添加一个UITableView而不是一个UITableViewController。
答案 3 :(得分:2)
您不需要使用TableViewController。只需添加一个UITableView。
开始于:
UITableView *tableData;
然后填写表并将其添加为子视图的方法。