Получить выбранный номер ячейки на странице - PullRequest
0 голосов
/ 14 января 2020

У меня есть табличное представление, которое всегда показывает 3 ячейки для каждой страницы.

Мне нужно знать, является ли выбранная ячейка первой, второй или третьей страницей.

I Я уверен, что есть формула для расчета этого, но я не могу ее найти.

Редактировать: давайте посмотрим, смогу ли я сделать себя яснее.

Представьте, что у вас есть массив из 8 объекты для отображения в виде таблицы. Поскольку табличное представление разбито на страницы, на первой странице будут показаны индексы 0, 1, 2 массива, на второй странице будут показаны индексы 3, 4, 5, а на последней странице будут показаны индексы 6 и 7.

Давайте представим, что мы на второй странице (показаны индексы 3, 4 и 5) и я выбираю вторую ячейку (индекс 4).

Мне нужно знать, что пользователь выбрал вторую ячейку и не indexPath.row, который в данном случае равен 4.

Ответы [ 2 ]

1 голос
/ 14 января 2020

Вам просто нужно применить оператор по модулю:

let indexOnThePage = indexPath.row % 3

indexOnThePage будет 0 для первого, 1 для второго и 2 для третьего.

4 % 3 == 1 // That means the second cell of the page

Бонус : если вам нужен номер страницы, просто наберите:

let pageNumber = indexPath.row / 3

Это даст 0 на первой странице, 1 на второй и т. д.

РЕДАКТИРОВАТЬ : Вот версия с последней страницей проблемы.

func indexOnPage(row: Int, page: Int, total: Int, itemsOnPage: Int = 3) -> Int {
    let lastPage = total / itemsOnPage

    if page != lastPage {
        return row % itemsOnPage
    }
    else {
        let delta = total % itemsOnPage
        return (row - delta) % itemsOnPage
    }
}

indexOnPage(row: 0, page: 0, total: 5) // 0
indexOnPage(row: 1, page: 0, total: 5) // 1
indexOnPage(row: 2, page: 0, total: 5) // 2
indexOnPage(row: 2, page: 1, total: 5) // 0
indexOnPage(row: 3, page: 1, total: 5) // 1
indexOnPage(row: 4, page: 1, total: 5) // 2

Это должно работать для вашей проблемы.

0 голосов
/ 15 января 2020

Это то, что я придумал. Большое спасибо @Zaphod за помощь.

Здесь я получаю indexPaths для видимых ячеек:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    NSArray *visibleCells = [[NSArray alloc] initWithArray:[_tableView indexPathsForVisibleRows]];
    NSLog(@"Cell n. %d", [self indexOnPage:(int)indexPath.row idx:(NSArray*)visibleCells total:(int)[_licenses count] itemsOnPage:3]);
}

Затем, чтобы проверить, нахожусь ли я на последней странице, я Мы немного изменили решение @ Zaphod, чтобы проверить, отображается ли последний объект:

-(int)indexOnPage: (int)row idx:(NSArray*)idx total:(int)total itemsOnPage:(int)itemsOnPage {
    NSIndexPath *lastIdx = [idx lastObject];
    int lastRow = (int)lastIdx.row;
    if (lastRow != [_licenses count]-1) {
        _selectedCell = row % itemsOnPage;
        return row % itemsOnPage;
    } else {
        int delta = total % itemsOnPage;
        _selectedCell = (row - delta) % itemsOnPage;
        return (row - delta) % itemsOnPage;
    }
}

Наконец, этот метод всегда возвращает 0, если выбрана первая видимая ячейка, 1, если выбрана вторая ячейка, и 2 если выбрана третья ячейка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...