Это сокращенный код для моего метода делегата 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;
}
Моя проблема заключается в том, что первая ячейка в разделе 1 (раздел 0 имеет 10 ячеек, раздел 1имеет только 1 ячейку) получает назначенную информацию, которая должна быть назначена только ячейке 0 первого раздела.Таким образом, вместо получения фона deleteButton и т. Д., Он получает заголовок метки «foobar».Я не совсем уверен, почему это происходит, потому что мои утверждения if довольно ясны.Любые идеи?
Редактировать: установка backgroundView в NULL приводит к тому, что те ячейки с текстом, когда они покидают вид, возвращаются без какого-либо фона.Так что это не жизнеспособное решение.Кроме того, текст для detailTextLabel по-прежнему установлен в ячейке, в которой не должно быть текста.
Вот как это выглядит, для фона backgroundViews в ячейке установлено значение nil, а текст отображается в ячейке удаления, гдеэто не должно:
Решение, рекомендованное Алексом Димом (замена старого кода очереди на данный код):
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];