Ios 标识符重叠两个单元格的Deqeureusablecell
在Ios 标识符重叠两个单元格的Deqeureusablecell,ios,objective-c,uitableview,Ios,Objective C,Uitableview,在UITableViewDataSource方法中,我检查是否有数据: - (NSInteger)tableView:(UITableView*)tableView numberOfRowsInSection:(NSInteger)section { if (data.count == 0) { return 1; //This one cell will be of type NoDataTypeCell } else { return da
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
}
}
因此,在cellforrowatinexpath
中,我以相同的方式检查要使用哪种类型的单元格:
- (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个NodeDataTypeCell被出列
一旦数据进入,TableView就会重新加载
numberOfRowsInSection
返回数据。计数
cellforrowatinexpath
不返回noDataCell
,它返回data.count
数据单元格的数量
除了我的tableView还有一个节点单元格。最奇怪的部分?它直接位于tableView中的第一个单元格上。该单元格不可选择,同时也使其后面的单元格不可选择。它没有数据,因为它尚未设置。但它就在那里,不会消失
我做错了什么
下面是单元格后面的视图调试器透视图。您可以清楚地看到第一行有两个单元格,第二行只有一个单元格
tableView dequeueReusableCellWithIdentifier:
将返回一个对象cell
,并添加到tableView
在上面的代码中:
SAFindSuggestedTableViewCell* dataCell = (SAFindSuggestedTableViewCell*)[tableView dequeueReusableCellWithIdentifier:@"hasDataIdentifier" forIndexPath:indexPath];
if (data.count == 0)
{
NODataTypeCell* cellNoData = (NODataTypeCell*)[tableView dequeueReusableCellWithIdentifier:@"noDataIdentifier];
如果数据=0
。两个单元格已添加到tableView
的相同indexath中。所以这就是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;
}
我看到你对坠机事件发表了评论。我认为这是因为您的逻辑与实际代码一致。您是否尝试过将SAFindSuggestedTableViewCell的出列转移到else子句?因为即使您不返回要呈现的数据单元,出列过程似乎也无法再次处理出列。@CStreel这是我按照您的建议执行操作时引发的错误:由于未捕获的异常“NSInvalidArgumentException”终止应用程序,原因:“-[\u UITableViewReorderingSupport\u needsSetup]:无法识别的选择器已发送到实例0x148b4b6d0'Yep您已获得它。逻辑上的问题是,这就是需要发生的事情