Вопрос по iphone, ios – UITableView - Как сохранить строки таблицы фиксированными как пользовательские прокрутки

13

Я хотел бы иметь возможность фиксировать положение определенных строк в UITableView по мере прокрутки пользователем.

В частности, у меня есть таблица, в которой определенные строки являются «заголовками»; для последующих строк, и мне бы хотелось, чтобы заголовок оставался в верхней части экрана при прокрутке пользователя вверх. Затем он ушел бы в сторону, когда пользователь прокручивает достаточно далеко, чтобы следующая строка заголовка заняла свое место.

Аналогичным примером будет приложение Any.DO. «Сегодня», «Завтра» и "Позже" строки таблицы всегда видны на экране.

У кого-нибудь есть предложения о том, как это можно реализовать?

В настоящее время я думаю о том, чтобы следовать за делегатом TableDidScroll и расположить свою собственную ячейку в соответствующем месте перед табличным представлением. Проблема состоит в том, что в другое время я действительно хотел бы, чтобы эти ячейки были настоящими ячейками таблицы, чтобы они могли, например, быть переупорядочены пользователем.

Спасибо,

Тим

почему вы не используете заголовки UITableView? Вы можете поместить текст туда или сделать собственный вид. Для этого есть методы UITableViewDelegate Novarg

Ваш Ответ

2   ответа
3

Это поведение по умолчанию для заголовков разделов в обычном режиме.UITableView экземпляров. Если вы хотите создать собственный заголовок, реализуйтеtableView:viewForHeaderInSection: метод в вашей таблице представления делегата и вернуть представление для вашего заголовка.

Хотя вам придется управлять секциями и строками, а не просто строками.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded tarmes
Error: User Rate Limit Exceeded tarmes
Error: User Rate Limit Exceeded
13

Я поиграл с этим и придумал простое решение.

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

Далее перехватим прокрутку табличного представления

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    // Add some logic here to determine the section header. For example, use 
    // indexPathsForVisibleRows to get the visible index paths, from which you 
    // should be able to get the table view row that corresponds to the current 
    // section header. How this works will be implementation dependent.
    //
    // If the current section header has changed since the pervious scroll request 
    // (because a new one should now be at the top of the screen) then you should
    // update the contents.

    IndexPath *indexPathOfCurrentHeaderCell = ... // Depends on implementation
    UITableViewCell *headerCell = [self.tableView cellForRowAtIndexPath:indexPathOfCurrentHeaderCell];

    // If it exists then it's on screen. Hide our false header

    if (headerCell)
        self.cellHeader.hidden = true;

    // If it doesn't exist (not on screen) or if it's partially scrolled off the top,
    // position our false header at the top of the screen

    if (!headerCell || headerCell.frame.origin.y < self.tableView.contentOffset.y )
    {
        self.cellHeader.hidden = NO;
        self.cellHeader.frame = CGRectMake(0, self.tableView.contentOffset.y, self.cellHeader.frame.size.width, self.cellHeader.frame.size.height);
    }

    // Make sure it's on top of all other cells

    [self.tableView bringSubviewToFront:self.cellHeader];
}

Наконец, нам нужно перехватить действия в этой ячейке и сделать правильные вещи ...

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded tarmes
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededreloadDataError: User Rate Limit Exceeded
Error: User Rate Limit ExceededreloadDataError: User Rate Limit Exceeded

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