Система будет выделять только достаточное количество ячеек для визуального отображения, а затем, когда один из них прокручивается, он использует его для прокрутки новой ячейки. В результате - когда это происходит, он запоминает предыдущий выбор, как вы видите.
Не уверен, почему этого не произошло до iOS 13 (похоже, ваша функция cellForRowAt:
должна установить правильное значение, если вы смотрите на правильную переменную row
, но вы должны просто иметь возможностьсбросьте его, переопределив метод UITableViewCell
s prepareForReuse()
.
Swift
class QuestionOnTopTableViewCell: UITableViewCell {
// stuffs
override func prepareForReuse() {
super.prepareForReuse()
self.segmentControl.selectedSegmentIndex = .noSegment
}
}
Obj-C
Это должно работать для вас:
-(void)prepareForReuse{
[super prepareForReuse];
self.segmentControl.selectedSegmentIndex = UISegmentedControlNoSegment;
}
Редактировать:
Я действительно только что увидел другой вопрос, утверждающий, что .noSegment
больше не работает после того, как значение было установлено в сборках iOS13 / Xcode 11: UISegmentedControl.noSegment перестал работать сXcode 11, iOS 13
Вместо этого, к сожалению, вам может понадобиться каждый раз заново создавать локальную версию сегментированного элемента управления и переопределять элемент управления: cell.segmentControl = myNewJustCreatedSegmentControl
youможет бытьвсе еще делаю это в prepareForReuse
методе