2 различных типов пользовательского UITableViewCells в UITableView

Единственная другая опция состоит в том, чтобы сделать вручную, что много систем RDBMS делают так или иначе...
- Создают новую таблицу

, можно тогда скопировать содержание старой таблицы по блоку за один раз. Всегда будучи осторожным из любого ВСТАВЛЯЕТ/ОБНОВЛЯЕТ/УДАЛЯЕТ на исходной таблице. (Мог управляться триггером. Хотя это вызвало бы замедление, это не блокировка...)

Когда-то законченный, измените имя исходной таблицы, затем измените имя новой таблицы. Предпочтительно в транзакции.

Когда-то законченный, перекомпилируйте любые хранимые процедуры, и т.д. то использование та таблица. Планы выполнения, вероятно, больше не будут действительны.

РЕДАКТИРОВАНИЕ:

Некоторые комментарии были сделаны об этом ограничении, являющемся немного плохим. Таким образом, я думал, что поместил новый взгляд на него для показа, почему это - как это...

  • Добавление нового поля похоже на изменение одного поля на каждой строке.
  • Полевые Блокировки были бы намного более твердыми, чем Блокировки строки, не брать в голову блокировки таблицы.

  • Вы на самом деле изменяете физическую структуру на диске, каждая запись перемещения.
  • Это действительно похоже на ОБНОВЛЕНИЕ на таблице Whole, но с большим количеством влияния...
53
задан Sorin Antohi 10 September 2009 в 03:39
поделиться

2 ответа

Вы должны создать другой идентификатор ячейки для двух стилей ячейки:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{

int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];
Feed *item = [[[[self selectedButton] category] feedsList] objectAtIndex:feedIndex + 1];

static NSString *CellIdentifier1 = @"Cell1";
static NSString *CellIdentifier2 = @"Cell2";

if(feedIndex == 0) {

   MainArticleTableViewCell *cell = (MainArticleTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier1];

   if (cell == nil) {
       cell = [[[MainArticleTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier1] autorelease];
       [[[cell subviews] objectAtIndex:0] setTag:111];
   }

   cell.feed = item;

   return cell;
}
else {
   NewsTableViewCell *cell = (NewsTableViewCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier2];

   if (cell == nil) {
       cell = [[[NewsTableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier2 orientation:currentOrientation] autorelease];
       [[[cell subviews] objectAtIndex:0] setTag:111];
   }

   cell.feed = item;

   return cell;
}

return nil;
}
78
ответ дан 7 November 2019 в 08:44
поделиться

Я не совсем понимаю ваш вопрос, но заметил две любопытные вещи. Если вы используете два разных типа ячеек, вам нужно использовать два разных идентификатора ячеек при вызове dequeueReusableCellWithIdentifier. В настоящее время вы используете один и тот же идентификатор для обоих, что неверно. Попробуйте что-нибудь вроде:

static NSString *MainArticleIdentifier = @"MainArticle";
static NSString *NewsIdentifier = @"News";

Кроме того, я никогда не видел ничего подобного:

int feedIndex = [indexPath indexAtPosition:[indexPath length] - 1];

Почему бы просто не использовать:

int feedIndex = indexPath.row;
8
ответ дан 7 November 2019 в 08:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: