我的UITableView
中有自定义单元格,根据字符串的值,我想在单元格中添加UILabel
。
这是我的单元格代码,
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary * tmpDictn = [tableAry objectAtIndex:indexPath.section];
NSString * typeStr = [tmpDictn objectForKey:@“DocumentType”];
NSString * cellIdentifier = @"TestCell";
TestCell *cell = (TestCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell){
cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
if ([typeStr isEqualToString:@“Text”]) {
UILabel * textLbl = [[UILabel alloc] init];
textLbl.backgroundColor=[UIColor clearColor];
textLbl.textColor=[UIColor lightGrayColor];
textLbl.userInteractionEnabled=NO;
textLbl.numberOfLines = 0;
textLbl.font = [UIFont fontWithName:@“Helvetica" size:16];
[textLbl setFrame:CGRectMake(30, 20, 250, 25)];
textLbl.text= [NSString stringWithFormat:@"%@ %i",[splitAry objectAtIndex:i],indexPath.section];
[cell addSubview:textLbl];
}
}
return cell;
}
我的UITableView
包含5个单元格(动态)。并且只有第一个单元格应该有此标签(这也会根据文本更改)。此代码在第一个单元格中添加UILabel
,但在第3个和第5个单元格中添加UILabel
。
我检查过它创建了一次UILabel
{1}}并添加到第一,第三和第五单元格中。而“文本”仅在Tableary的第一个位置。
答案 0 :(得分:1)
尝试为需要添加标签的单元格使用不同的单元格标识符,例如@ “TextCell”。否则,您正在重复使用已添加标签的单元格,即使它不应该在那里。或者,您可以在if ([typeStr isEqualToString:@“Text”])
区块的“其他”条件下删除标签(如果有),但我认为前者更清晰。
答案 1 :(得分:1)
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSDictionary * tmpDictn = [tableAry objectAtIndex:indexPath.section];
NSString * typeStr = [tmpDictn objectForKey:@“DocumentType”];
NSString * cellIdentifier = @"TestCell";
TestCell *cell = (TestCell *)[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (!cell){
cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
UILabel *lbl = [cell viewWithTag:1];
if(lbl)
{
[lbl removeFromSuperView];
}
if ([typeStr isEqualToString:@“Text”]) {
UILabel * textLbl = [[UILabel alloc] init];
textLabel.tag = 1;
textLbl.backgroundColor=[UIColor clearColor];
textLbl.textColor=[UIColor lightGrayColor];
textLbl.userInteractionEnabled=NO;
textLbl.numberOfLines = 0;
textLbl.font = [UIFont fontWithName:@“Helvetica" size:16];
[textLbl setFrame:CGRectMake(30, 20, 250, 25)];
textLbl.text= [NSString stringWithFormat:@"%@ %i",[splitAry objectAtIndex:i],indexPath.section];
[cell addSubview:textLbl];
}
}
return cell;
}
答案 2 :(得分:0)
您正在使用
[tableView dequeueReusableCellWithIdentifier:cellIdentifier];
您的代码的问题是表视图正在重用您的单元格。因此,当您的细胞数量增加时,它会出现在许多细胞中。
我是一个有点老程序员,但我认为最好的方法是
if(!cell) {
cell = [[TestCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
//Add your label here.
}
如果(!标签) {//你的代码;//如果您的条件未满足,请将标签文本设置为nil;
}
快速解决方案是将else和text设置为nil;
干杯。