При рисовании UITableViews ячейки таблицы используются повторно, поэтому существует только один экземпляр UITableViewCell, идентифицируемый строкой, переданной в dequeueReusableCellWithIdentifier:.
Если вы обновите ячейку в методе cellForRowAtIndexPath: это будетне даст ожидаемого эффекта - каждый раз вы будете ссылаться на одну и ту же ячейку (поэтому каждая ячейка будет иметь кнопку в одной и той же позиции).Следовательно, проблема, с которой вы сталкиваетесь, заключается в том, что при прокрутке положение кнопки меняется.
Самая простая вещь, позволяющая решить вашу проблему, - это изменить код, чтобы прекратить повторное использование ячеек, каждый раз создавая новую ячейку в cellForRowAtIndexPath.Обновите код следующим образом:
// comment out this line
// cell = [tableView dequeueReusableCellWithIdentifier:identifier];
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:nibName];
cell = [nib objectAtIndex:0];
Обратите внимание, что повторное использование ячеек является предпочтительным из соображений эффективности (для экономии памяти и сокращения выделения памяти).
Идеальным решением является созданиепользовательский подкласс UITableViewCell и обновите положение UIButton в методе layoutSubviews.