在UITableViewDataSource
方法中,我检查是否有数据:
- (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section
{
if (data.count == 0)
{
return 1; //This one cell will be of type NoDataTypeCell
} else {
return data.count //These cells will be of type DataTypeCell
}
}
所以在cellForRowAtIndexPath
我用同样的方式检查要使用哪种类型的细胞:
- (UITableViewCell*)tableView:(UITableView*)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];
if (data.count == 0)
{
NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
//Setup the noDataCell
return cellNoData;
} else {
return dataCell;
}
}
这导致了我以前从未见过的东西。正如预期的那样,我的控制器加载数据为空。结果,1个NODataTypeCell出列了。
数据进入后,将重新加载TableView。
numberOfRowsInSection
返回data.count
cellForRowAtIndexPath
不会返回noDataCell
,会返回data.count
dataCells
除了我的tableView仍然有noDataCell。最奇怪的部分?它直接位于tableView中的第一个单元格上。细胞是不可选择的,也使得它背后的细胞无法选择。它没有数据,因为它尚未设置。但它在那里,它不会消失。
我做错了什么?
答案 0 :(得分:2)
tableView dequeueReusableCellWithIdentifier:
将返回一个对象cell
并添加到tableView
。
在上面的代码中:
SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];
if (data.count == 0)
{
NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
如果data = 0
。两个单元格已添加到tableView
的相同索引路径。这就是bug的原因。
您应该将代码分开,以便在indexPath中返回一个完整的单元格,如:
if (data.count == 0)
{
NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
//Setup the noDataCell
return cellNoData;
} else {
SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];
return dataCell;
}
我看到你评论崩溃。我认为这是因为你的真实代码的逻辑。