为什么tableview中的代码每行重复4次?

时间:2010-02-16 03:04:32

标签: uitableview indexing

我的代码中有一个名为“conteggio”的变量,你可以在下面看到...这个变量在我的tableview的每一行都要增加1 ...当我尝试这样做时,我收到一个像:4,8,12,16等。每行4的倍数......似乎每行重复4次代码。

如果我在桌子上来回滚动那些数字会变成倍数。

这是我的代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cellID"];

if (cell == nil){
    cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:@"cellID"] autorelease];
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"cellID"];
    cell.selectionStyle = UITableViewCellSelectionStyleNone;
}


NSString *alphabet = [fevIndice objectAtIndex:[indexPath section]];

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF beginswith[c] %@", alphabet];
NSArray *fv = [fev filteredArrayUsingPredicate:predicate];


conteggio++;


NSString *string = [NSString stringWithFormat:@"%d", conteggio];

cell.detailTextLabel.text = string;


if ([fv count]>0) {

    NSString *cellValue = [fv objectAtIndex:indexPath.row];

    cell.textLabel.text = cellValue;

    //indexPath.section; //[fv count] numero di elementi in una section;
    //cell.detailTextLabel.text = [fevMesi objectAtIndex:conteggio];
    //cell.imageView.image = [UIImage imageNamed:[fevIcona objectAtIndex:]];

}

cell.detailTextLabel.numberOfLines = 3;
cell.detailTextLabel.font = [UIFont systemFontOfSize:11.0];

return cell;

}

3 个答案:

答案 0 :(得分:1)

使用indexPath.row获取它正在调用的行号。就像乔纳森所说,这种方法可以被调用多次,所以不要试图自己跟踪这一行。

答案 1 :(得分:0)

没有关于每个渲染调用该方法的次数的合同。只需询问indexPath的终端索引。

答案 2 :(得分:0)

正如其他人已经提到的那样,每当表视图需要显示单元格时(例如,当它滚动到视图中时),每行可以多次调用cellForRowAtIndexPath。

您的表格视图中有多个部分吗?
不管是哪个部分,conteggio都应该是“绝对的”唯一行号吗?

如果每个部分的行数相同,那么计算绝对行数就是一个简单的公式。

但是,如果每个部分的行数不同,您可以通过执行以下操作来计算绝对行数:

conteggio = 0;
for (int s = 0; s < indexPath.section; s++)  
{
    conteggio += [tableView numberOfRowsInSection:s];
}
conteggio += indexPath.row + 1;

如果可能的话,重新设计fevMesi可能会更好,因此可以使用行和节来检索其中的对象,而不必每次都计算绝对行数。