我对indexPath.section
方法中的cellForRowAtIndexPath:
有一个奇怪的问题。
我有一个包含4个部分的分组tableview,我正在尝试为第3部分应用自定义UITableViewCell
,但它不起作用。
当我尝试if(indexPath.section==0){...}
时,它会起作用(对于section==1
和section==2
也是如此)但section==3
失败了。 (?)
我不知道为什么,这没有任何意义..有人已经有这个(奇怪的)问题吗?
当我尝试if(indexPath.row==0){...}
时,它适用于所有4个部分..所以......?!
这是我的代码:
//ViewController.h
import "DirectionsTableViewCell.h"
DirectionsTableViewCell *directionsCell; // customized UITableViewCell
//ViewController.m
if (indexPath.section==3) {
static NSString *CellIdentifier = @"directionsCell";
DirectionsTableViewCell *cell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"DirectionsTableViewCell" owner:self options:nil];
cell = directionsCell;
}
return cell;
}
else {
static NSString *CellIdentifier = @"defaultCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
cell.textLabel.text = @"Test";
return cell;
}
问题解决了!
我刚刚添加了if(indexPath.row)
,它运行正常。
最后你得到了这个:
if(indexPath.section==3) {
if(indexPath.row) {
static NSString *CellIdentifier = @"directionsCell";
DirectionsTableViewCell *cell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"DirectionsTableViewCell" owner:self options:nil];
cell = directionsCell;
}
return cell;
}
}
答案 0 :(得分:1)
好吧,你永远不会在if(cell == nil)
内分配DirectionsTableViewCell。
在代码的这一部分:
DirectionsTableViewCell *cell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(cell == nil) {
[[NSBundle mainBundle] loadNibNamed:@"DirectionsTableViewCell" owner:self options:nil];
cell = directionsCell;
}
您永远不会分配DirectionsTableViewCell
类型的单元格,以便稍后重复使用。我还注意到你有一个名为directionsCell
的名为DirectionsTableViewCell
的ivar。除非您在其他位置分配和设置,否则cell = directionsCell
最终会为您的cell
请尝试使用此代码,看看它是否有效:
static NSString *CellIdentifier = @"directionsCell";
directionsCell = (DirectionsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(directionsCell == nil) {
directionsCell = [[DirectionsTableViewCell alloc] init]; //Or whatever your initializer is
}
return directionsCell;