Невозможно переупорядочить UITableViewCell в _некоторые_ пустые разделы UITableView - PullRequest
2 голосов
/ 09 марта 2010

Если у меня UITableView в режиме редактирования с включенным переупорядочением, кажется, что я не могу переместить некоторые (но не все) ячейки в некоторые (но не все) пустые секции. Например, если у меня есть этот макет:

Section 1
  apple
  banana
Section 2
  doberman
Section 3
Section 4

Затем я могу переместить «доберман» в любой слот в секции 1 (кроме «банана»), но я не могу переместить его в секцию 3 или 4 вообще.

С другой стороны, я могу переместить «яблоко» и «банан» в раздел 2 раздела (кроме «добермана») и МОГУ переместить его в раздел 3, но НЕ в раздел 4.

Что дает? это похоже на ошибочное поведение. Как люди обходят это? Знает ли Apple об этой ошибке?

Ответы [ 4 ]

2 голосов
/ 13 сентября 2011

В этом блоге рассказывается, как проще всего это сделать:

http://davemeehan.com/technology/moving-uitableviewcell-between-sections-in-grouped-uitableview

Неважно, если раздел пуст. Просто верните некоторый текст в titleForFooterInSection: и вы сможете решить проблему. Это даже работает, возвращая @ "".

2 голосов
/ 21 мая 2010

Я использовал другой хак: создайте фиктивный последний раздел с пустой ячейкой (невидимый backgroundView) в режиме редактирования. Благодаря этому я могу сохранить организацию разделов / строк, и переупорядочение прекрасно работает даже с «последним» разделом.

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

2 голосов
/ 23 марта 2010

Да, это яблочная ошибка. Я говорил с яблоком, использовал один из моих «билетов поддержки», чтобы они сказали мне, что это их плохо.

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

Глупое яблоко ...

0 голосов
/ 01 августа 2010

Сирдек правильный. Просто скопируйте следующий код в ваш UITableViewDelegate / UITableViewDataSource.

- (UIView *)tableView:(UITableView *)tableView viewForFooterInSection:(NSInteger)section
{
    NSInteger lastSection = [self numberOfSectionsInTableView:tableView] - 1;
    NSInteger lastRow = [self tableView:tableView numberOfRowsInSection:lastSection] - 1;
    CGFloat height = [self tableView:tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:lastRow inSection:lastSection]];

    return (section == lastSection ? [[[UIView alloc] initWithFrame:CGRectMake(0, 0, 320, height)] autorelease] : nil);
}


- (CGFloat)tableView:(UITableView *)tableView heightForFooterInSection:(NSInteger)section
{
    NSInteger lastSection = [self numberOfSectionsInTableView:tableView] - 1;
    NSInteger lastRow = [self tableView:tableView numberOfRowsInSection:lastSection] - 1;
    CGFloat height = [self tableView:tableView heightForRowAtIndexPath:[NSIndexPath indexPathForRow:lastRow inSection:lastSection]];

    return (section == lastSection ? height : 0);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...