我有问题。
我实现了一个表视图。在didSelectRowAtIndexPath
方法中,我增加了单元格的高度,并为该单元格的contentView
添加了一个textview。但是如果我向下滚动表视图(例如10个单元格),我将再次看到相同的textview。
你能帮我吗?
这里有一些代码可以更好地理解问题:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if(selectedIndex == indexPath.row)
{
return CELL_HEIGHT * 5;
}
return CELL_HEIGHT;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
[tableView deselectRowAtIndexPath:indexPath animated:TRUE];
UITableViewCell *cell = [aTableView cellForRowAtIndexPath:indexPath];
if (selectedIndex == indexPath.row)
{
selectedIndex = -1;
[[cell.contentView viewWithTag:COOL_TAG] removeFromSuperview];
}
else
{
UITableViewCell *previousCell = [aTableView cellForRowAtIndexPath:[NSIndexPath indexPathForRow:selectedIndex inSection:0]];
if ([previousCell.contentView viewWithTag:COOL_TAG])
{
[[previousCell.contentView viewWithTag:COOL_TAG] removeFromSuperview];
}
selectedIndex = indexPath.row;
UITextView *text = [[UITextView alloc] initWithFrame:CGRectMake(10, 45, 255, 180)];
[text.layer setBackgroundColor:[[UIColor whiteColor] CGColor]];
[text.layer setBorderColor:[[UIColor grayColor] CGColor]];
[text.layer setBorderWidth:1.0f];
[text.layer setCornerRadius: 8.0f];
[text.layer setMasksToBounds:YES];
[text setEditable:NO];
text.text = [questionArray objectAtIndex:indexPath.row];
text.tag = COOL_TAG;
[cell.contentView addSubview:text];
}
[tableView beginUpdates];
[tableView endUpdates];
}
提前致谢!
答案 0 :(得分:2)
问题在于细胞正在被重复使用。因此,当您向下滚动添加了textview的单元格时,将在另一行中重复使用。
我认为解决此问题的最佳方法是将textview添加到cellForRowAtIndexPath方法的单元格中。
然后,您需要创建一个数组,在该数组中定义该行是否应显示textview。然后在didselect方法中,更改数组值并更新表。
请注意,检查应该在cellForRowAtIndexPath中的if(cell == nil)检查之外进行,否则不会为重用的单元格调用它。
答案 1 :(得分:0)
在viewdidload中创建textview并将其添加到CellForRow方法中的tableview单元格中。这可能会解决您的问题
答案 2 :(得分:0)
尝试此代码,因为在您的情况下,单元格被重用
static NSString * CellIdentifier = @“YourCell”;
YourCell *cell = (YourCell *) [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle] loadNibNamed:@"YourCell" owner:self options:nil];
for (id currentObject in topLevelObjects){
if ([currentObject isKindOfClass:[UITableViewCell class]]){
cell = (YourCell *) currentObject;
break;
}
}
}