在Xcode中控制表格单元格行为的问题

时间:2012-08-23 16:57:13

标签: objective-c ios xcode uitableview

我是Objective C的新手,而且我正在努力学习一张桌子。我想要的是当我点击它展开的单元格并向我显示另一个标签的子视图,然后当我再次单击它时隐藏子视图并显示原始文本。目前这一切都非常糟糕,我真的不知道应该如何编码。前提是我有一个问题扩展到揭示答案,我认为这很容易......这是我的代码:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {

UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];

// Deselect cell
[tableView deselectRowAtIndexPath:indexPath animated:TRUE];

// create the subview and apply it to the current cell selected
CGRect frame = CGRectMake(0, 0, 160, 50);
UILabel *label = [[UILabel alloc] initWithFrame:frame];
label.text = @"OH";
[cell.contentView addSubview:label];

// Toggle 'selected' state
BOOL isSelected = ![self cellIsSelected:indexPath];

// Store cell 'selected' state keyed on indexPath
NSNumber *selectedIndex = [NSNumber numberWithBool:isSelected];
[selectedIndexes setObject:selectedIndex forKey:indexPath];

// update the view that holds the table
[firstView beginUpdates];
[firstView endUpdates];

//Change cell contents
[tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationNone];

}

如果有人可以提供一些帮助,更好的代码更改,以告诉我应该怎么做,这将是非常好的,因为我不知所措,需要在接下来的几个小时内完成!伊克。

谢谢!

1 个答案:

答案 0 :(得分:0)

首先,当您选择和取消选择单元格时,您将标签添加到您调用此方法的contentView 时间。只有在最初取消选择单元格时才需要添加标签,然后在再次触摸单元格时需要将其删除。您需要保留对标签的引用(或在其上设置标签),以便您可以致电removeFromSuperview

[label removeFromSuperview];

如果单元格在屏幕外滚动并重新使用(在被选中时),我也不清楚会发生什么情况;是cellForRowAtIndexPath中添加回单元格的标签?如果是这样,为什么还要在这里添加呢?

其次,请添加您的cellForRowAtIndexPath方法,因为您可能会将文本设置为数组值(因此我们可以尝试修复您的实际问题)。