Это правильное поведение.UITableView не является списком .Система кэширует ячейки, находящиеся вне экрана, чтобы сохранить память и ЦП, и их нельзя повторять способом, который имеет смысл.
Хорошо, вы должны отслеживать модель / данные, а tableView будет отслеживатьотображения этого.У меня были некоторые проблемы с этим, пока я не принял, что uitableView не является списком:)
Итак, есть массив объектов, каждый из которых соответствует данным в ячейке.При построении отдельных ячеек, таких как:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"categoryCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
Item *item = [self.itemList objectAtIndex:indexPath.row];
[cell.textLabel setText:[item itemBrand]]; //notice that here we set the cell values
return cell;
}
Когда пользователь щелкает, вы меняете свою модель следующим образом:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
NSLog(@"IndexPat.row%i", indexPath.row);
Item item = (Item*) [self.itemList objectAtIndex:indexPath.row];
//change the state of item
}
Таким образом, TableView будет обновляться в соответствии с моделью / данными.Вы только что управляли моделью.