Вы можете генерировать случайный идентификатор ячейки каждый раз, чтобы он не использовался повторно.
Однако это не очень хорошо сказывается на производительности прокрутки и потреблении памяти, поэтому рассмотрите возможность многократного использования ячеек (т. Е. Придумайте способ замены данных в них).
Редактировать:
Вы всегда можете просто скопировать виды из одного в другое, что-то вроде этого:
UITableViewCell* myCell = [UITableViewCell alloc] initWithStyle:YOUR_CELL_STYLE reuseIdentifier:YOUR_RANDOM_ID];
for (UIView *view in newCell.subviews) {
[view removeFromSuperview];
[myCell addSubview: view];
}
Вам также может понадобиться настроить фрейм myCell таким же, как у newCell, и если newCell является целью действия для каких-либо событий (например, нажатие элемента управления в ячейке вызывает некоторое действие, определенное в классе ячейки) вам также придется переназначить их на myCell.
Edit2:
Для перемещения действий вы можете сделать что-то вроде этого:
NSSet* targets = [control allTargets];
for(id target in targets) {
NSArray* actions = [control actionsForTarget:target forControlEvent:UIControlEventTouchUpInside];
for(NSString* selectorName in actions) {
[newControl addTarget:target action:NSSelectorFromString(selName) forControlEvents:UIControlEventTouchUpInside];
}
}
Замените вашу новую ячейку на цель - и убедитесь, что она реализует все необходимые селекторы (или вы можете поставить новый селектор). Приведенный выше код заменит цели для UIControlEventTouchUpInside - вы можете вместо этого использовать те, которые вам нужны (или использовать allControlEvents для перечисления целей, используемых элементом управления).