Я обнаружил странное поведение с setSelected: animated: в моем пользовательском классе UITableViewCell.Я обнаружил, что эта функция вызывается несколько раз, если я нажимаю на ячейку в моей таблице.Мне интересно, является ли это нормальным поведением или ошибкой в моем коде.
Чтобы помочь с отладкой, я изменил функцию setSelected: animated: в моей собственной реализации класса UITableViewCell как таковой:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
// Configure the view for the selected state.
if (selected)
NSLog(@"Yes %X", &self);
else
NSLog(@"No %X", &self);
}
Если я нажму на ячейку в симуляторе, вот что я получу в консоли:
2011-03-22 22:05:26.963 marketPulse[3294:207] Yes BFFFDDD0
2011-03-22 22:05:26.964 marketPulse[3294:207] Yes BFFFDE30
Можно подумать, что я получу только 1 запись, так какЯ нажал только на 1 ячейку.
И если после этого я нажму на другую ячейку:
2011-03-22 22:07:11.014 marketPulse[3294:207] No BFFFD890
2011-03-22 22:07:11.016 marketPulse[3294:207] No BFFFDD00
2011-03-22 22:07:11.017 marketPulse[3294:207] Yes BFFFDDD0
2011-03-22 22:07:11.017 marketPulse[3294:207] Yes BFFFDE30
Если я нажму на одну и ту же ячейку 2 раза подряд, я получу больше, чем2 Да :
2011-03-22 22:08:41.067 marketPulse[3294:207] Yes BFFFDDD0
2011-03-22 22:08:41.068 marketPulse[3294:207] Yes BFFFDE30
2011-03-22 22:08:41.069 marketPulse[3294:207] Yes BFFFDE30
Чем больше раз я нажимаю на одну и ту же ячейку, тем больше Да я получу, и если после этого я нажму на другую ячейкуЯ получу много Нет
Я поставил точку останова перед NSLog, и, глядя на отладчик, кажется, что все повторяющиеся вызовы исходят из одного и того же объекта.
Вот часть моей функции tableView: cellForRowAtIndexPath: , так что вы можете увидеть, как мойобрабатываются ячейки:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *ContentCellIdentifier = @"newsTableCellContent";
UITableViewCell *cell;
//index of cell data in tableData
NSUInteger index = indexPath.row / 2;
...
//content of story
else if( [indexPath row] % 2 == 1 ) {
cell = [tableView dequeueReusableCellWithIdentifier:ContentCellIdentifier];
if (cell == nil) {
NSArray *topLevelObjects = [[NSBundle mainBundle]
loadNibNamed:@"newsTableCells"
owner:nil options:nil];
for (id currentObject in topLevelObjects) {
if ( [currentObject isKindOfClass:[newsTableCellContent class]] ) {
cell = currentObject;
break;
}
}
}
((newsTableCellContent *)cell).content.text = [[tableData objectAtIndex:index] description];
}
return cell;
}
Все работает нормально, поэтому сложно определить, являются ли повторные вызовы setSelected: animated: преднамеренными или нет.Если это нормальная операция, я могу обойтись другим методом, но я просто хотел бы знать, должно ли это произойти или нет.
Спасибо