Мне было интересно узнать о хороших и эффективных для памяти способах перезагрузки всех изменений, внесенных в UITableView. Представьте себе нативные приложения для заметок Apple, которые обновляют UITableView, если вы изменили дату / заголовок заметки.
Когда я анимирую индекс, который показывает вам содержимое, я перезагружаю данные моего индекса следующим образом:
[indexTable reloadData];
Теперь единственная проблема в том, что не каждая ячейка будет обновлена, если она использовалась ранее, потому что у меня было это в моей функции, которая загружает ячейки:
//if (cell == nil) { // assign a label to them, e.g. the title of a note
//} else {
// label = (UILabel *) [cell viewWithTag:1];
//}
См. Ниже весь код. Теперь мне действительно интересно, что делает бит label = (UILabel *) [cell viewWithTag:1];
? Все, что я знаю, это то, что он не обновляет мои данные, если пользователь, например, ввел новый заголовок заметки (несмотря на то, что я вызывал перезагрузку indexTable!).
Буду ли я сталкиваться с серьезными проблемами, оставляя их, как я делаю в следующем коде?
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UILabel *label;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
//NSLog(@"checking if cell is nil");
//if (cell == nil) {
NSLog(@"cell=nil");
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease];
CGRect frame = CGRectMake(10, 0, 200, 30);
label = [[UILabel alloc] initWithFrame:frame];
label.lineBreakMode = UILineBreakModeTailTruncation;
label.tag = 1;
label.text = [[indexContent objectAtIndex:indexPath.row] itemTitle];
[cell.contentView addSubview:label];
[label release];
//} else {
// label = (UILabel *) [cell viewWithTag:1];
//}
return cell;
}
Любые объяснения будут очень признательны!