这是我的cellForRowAtIndexPath
UITableView代理方法的简略代码:
- (UITableViewCell*)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"blahblahblah"];
if (cell == nil) {
// No cell to reuse => create a new one
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"blahblahblah"] autorelease];
}
cell.textLabel.text = @"";
cell.detailTextLabel.text = @"";
cell.backgroundView = NULL; //problem here
// Initialize cell
//blah blah blah
//now to the good part...
if(indexPath.section == 1) {
cell.backgroundView = deleteButton;
cell.userInteractionEnabled = YES;
cell.textLabel.text = nil;
cell.detailTextLabel.text = nil;
}
else if(indexPath.section == 0) {
NSLog(@"section: %i row: %i", indexPath.section, indexPath.row);
switch (indexPath.row) {
case 0:
cell.textLabel.text = @"foobar";
//more stuff
break;
//lots more cases
default:
break;
}
}
return cell;
我的问题是,第一节中的第一个单元格(第0节有10个单元格,第1节只有1个单元格)被分配了应该分配给第一节的单元格0的信息。 因此,它得到了标签标题“foobar”,而不是删除按钮背景等。 我不太确定为什么会发生这种情况,因为我的if语句非常清晰。 有任何想法吗?
编辑:将backgroundView设置为NULL会导致那些具有文本的单元格在离开视图时回来没有任何背景。因此,这不是可行的解决方案。 此外,detailTextLabel的文本仍然设置在不应该有任何文本的单元格上。
这就是它的外观,将单元格backgroundViews设置为nil并在不应该出现的删除单元格上显示文本:
![enter image description here](https://istack.dev59.com/l5oI6.webp)
解决方案,如Alex Deem建议的(用此代码替换旧的dequeue代码):
NSString* identifier;
if(indexPath.section == 0)
identifier = @"0";
else
identifier = @"1";
UISwitch *switchView;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
if (cell == nil) {
// No cell to reuse => create a new one
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:identifier] autorelease];