我一直遇到一个我以前从未见过的表格细胞的奇怪问题。当我滚动桌子时,它们互相流血。例如,现在我在第一部分中有一个单元格显示“Device”,第二部分中有一组单元格表示“Hi”,然后是第三部分中的一些空白单元格。当我滚动时,有时“设备”被写在“Hi”之上(因此两个标签都可见但相互重叠(它们具有清晰的背景颜色),有时“Hi”会写在第三部分的单元格中。我一直在试图弄清楚什么是错的,但似乎什么都没有用。
以下是我的表视图控制器的相关部分:
- (id)initWithDeviceCoordinator:(DeviceCoordinator*)dev_con
{
self = [super initWithStyle:UITableViewStyleGrouped];
if (self) {
device_coordinator = dev_con;
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 4;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
// Return the number of rows in the section.
if (section == 0 || section == 3) return 1;
else if (section == 1) return 8;
else if (section == 2) return 2;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
}
if (indexPath.section == 0) cell.textLabel.text = [device_coordinator getDeviceName];
else if (indexPath.section == 1)
{
if (indexPath.row == [[device_coordinator getChannelList] count])
{
cell.textLabel.text = @"Add new channel";
return cell;
}
cell.textLabel.text = @"HI";
return cell;
}
return cell;
}
该类中的所有其他函数都是默认的XCode。
答案 0 :(得分:1)
您应该将cell.textLabel.text = nil
设置为开头,否则当您重复使用单元格时,您会看到错误位置的文本(就像您说您看到Hi不应该出现的位置)。至于重叠标签,我认为你粘贴的代码不会导致这种情况。你在使用自定义单元吗?
答案 1 :(得分:0)
我发现了问题。就是这条线:
static NSString *CellIdentifier = @"Cell";
将其更改为固定的所有内容:
NSString *CellIdentifier = [NSString stringWithFormat:@"Cell %d_%d",indexPath.section,indexPath.row];