我在Storyboard中有标识符的单元格和带标记的相应对象。第一次调用cellForRowAtIndexPath时,viewWIthTag返回对象ok。例如,下一次btnCompartilhar是零。
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *sectionTitle = [sectionsTitles objectAtIndex:indexPath.section];
NSArray *secAtt = [attractions objectForKey:sectionTitle];
Evento *evento = (Evento*)[secAtt objectAtIndex:indexPath.row];
UITableViewCell *cell = nil;
if(evento.listaImagens && [evento.listaImagens count] > 0) {
cell = [tableView dequeueReusableCellWithIdentifier:@"Cell" forIndexPath:indexPath];
}
else {
cell = [tableView dequeueReusableCellWithIdentifier:@"CellSemFoto" forIndexPath:indexPath];
}
[cell setSelectionStyle:UITableViewCellSelectionStyleNone];
UIButton *btnCompartilhar = (UIButton *)[cell.contentView viewWithTag:40];
[btnCompartilhar.titleLabel setHidden:YES];
btnCompartilhar.titleLabel.text = sectionTitle;
btnCompartilhar.tag = indexPath.row;
[btnCompartilhar addTarget:self action:@selector(compartilharClick:) forControlEvents:UIControlEventTouchDown];
return cell;
}
我执行了命令po [cell.contentView recursiveDescription]并发现带有标签40的Button仅在第一次出现。但所有其他对象都是时候
答案 0 :(得分:0)
调用btnCompartilhar.tag = indexPath.row;
会更改标记,以便下次重复使用该单元时无法再找到它。
您不应该依赖viewWithTag:
,而是应该创建自定义UITableViewCell
子类并添加允许您访问所需视图的属性。如果需要,单元格还可以包含行号等附加信息。
请注意,您当前的方法存在其他问题,例如多次添加目标和操作,这也不是一个好主意。