ViewWIthTag返回nil(只返回一次对象)

我有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],发现带标签的Button 40只在第一次出现。 但是所有其他的对象都是这个时代

调用btnCompartilhar.tag = indexPath.row; 更改标签,所以下次单元格被重用时再找不到。

你不应该依赖viewWithTag:而是你应该创build一个自定义的UITableViewCell子类,并添加属性,允许你访问所有你需要的视图。 如果你需要的话,那么这个单元格还可以有更多的信息,比如行号。

请注意,您目前的方法还有其他问题,例如多次添加目标和操作,这也不是一个好主意。