Путаница с setNeedsDisplay UIView

У меня есть ivar UITableView* myTableView. У меня есть данные, загружаемые из Интернета, поэтому, когда данные загружаются, я должен вызвать [myTableView setNeedsDisplay], я знаю, что могу/должен вызвать [myTableView reloadData], но путаница в том, что вызов setNeedsDisplay также должен работать, но не работает.

Я просто ищу объяснение того, что делает setNeedsDisplay? при вызове экземпляра UITableView.

Согласно документации setNeedsDisplay вызывает drawRect в «следующем цикле рисования». Так может ли кто-нибудь сказать мне, что такое следующий цикл рисования.


person Satyavrat    schedule 26.08.2011    source источник


Ответы (5)


setNeedsDisplay помечает вызов UIView как требующий перерисовки, это чисто визуальный смысл, который, как указано, произойдет в следующем цикле рисования.

Это полностью отличается от перезагрузки данных при использовании в контексте UITableView.

Дополнительную информацию по этому вопросу см. в этой статье.

person Community    schedule 26.08.2011
comment
Ссылка не ведет на релевантный контент - person vharron; 08.01.2019

Метод setNeedsDisplay не имеет ничего общего с перезагрузкой tableView. Он просто перерисовывает view tableView, а не его ячейки или разделители.

setNeedsDisplay и reloadData предназначены для совершенно разных целей.

person EmptyStack    schedule 26.08.2011

SetNeedsDisplay

Хороший пример — когда UIImageView визуализируется с одним изображением; и пока оно все еще на экране, вы меняете изображение на что-то другое. В этом случае простое изменение изображения не всегда будет вызывать перерисовку представления, для этого вам нужно сделать вызов setNeedsDisplay.

обновить данные

Его нужно вызывать, когда изменяется базовый источник данных для табличного представления, и вы хотите, чтобы это отражалось в пользовательском интерфейсе. В этом случае вызовите этот метод reloadData.

person Durai Amuthan.H    schedule 02.08.2013

Как правило, вам нужно вызывать setNeedsDisplay только для пользовательских представлений, для которых вы реализовали drawRect.

person morningstar    schedule 26.08.2011

Мое решение состояло в том, чтобы обновить все видимые ячейки и отслеживать indexPath ячейки в моем пользовательском классе «ProductTableViewCell» с помощью reloadRowsAtIndexPaths, см. ниже:

NSArray *arrayCells = [self.tableView visibleCells];
NSMutableArray *mArrayIndexPaths = [[NSMutableArray alloc] init];
for(ProductTableViewCell *cell in arrayCells) {
    [mArrayIndexPaths addObject:cell.indexPath];
}

[self.tableView beginUpdates];
[self.tableView endUpdates];
[self.tableView reloadRowsAtIndexPaths:[mArrayIndexPaths copy] withRowAnimation:UITableViewRowAnimationAutomatic];

Вот как определяется класс:

@interface ProductTableViewCell : UITableViewCell {
    NSString *reuseID;
}

@property (nonatomic, strong) NSIndexPath *indexPath;
person Mike Zriel    schedule 26.04.2016