获取页面中选定的单元格编号

Posted

技术标签:

【中文标题】获取页面中选定的单元格编号【英文标题】:Get the selected cell number in a page 【发布时间】:2020-01-14 15:17:50 【问题描述】:

我有一个表格视图,每页总是显示 3 个单元格。

我需要知道所选单元格是页面的第一个、第二个还是第三个。

我确定有一个公式可以计算,但我找不到。

编辑:让我们看看我是否能让自己更清楚。

想象有一个包含 8 个对象的数组显示在 tableview 中。因为tableview是分页的,所以第一页会显示数组的索引0、1、2,第二页会显示索引3、4、5,最后一页会显示索引6和7。

假设我们在第二页(显示了索引 3、4 和 5),我选择了第二个单元格(索引 4)。

我需要知道用户选择了第二个单元格,而不是在本例中为 4 的 indexPath.row。

【问题讨论】:

这能回答你的问题吗? Get Selected index of UITableView 不。我已经知道所选单元格的 indexPath,我需要一个公式,根据在显示的页面中选择的单元格给出 1、2 或 3。 页面是什么意思? 我的意思是启用了滚动的分页选项,并且表格总是显示3个单元格进行滚动。 如何只有 3 个单元格可见,它总是固定的三元组,即 [0,1,2] 或 [3,4,5]?可见单元格会是 [1,2,3] 吗? 【参考方案1】:

你只需要应用模运算符:

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

这应该可以解决您的问题。

【讨论】:

就是这样!我知道这很容易,但我找不到……一定是我的流感 :) 流感没有帮助! 我已经选择了这个答案,但我现在发现它并非在所有情况下都有效。例如,如果数组有 5 个条目,则第一页的索引为 0、1、2,但第二页的索引为 2、3、4,这是它停止正常工作的时候。 我看到的问题是,您使用 id 2 的行,是第一页上的第三个,第二页上的第一个。当您提供indexPath.row 时,您知道页面和总数吗? 是的,我知道总数和页码。【参考方案2】:

这就是我想出的。非常感谢@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。

【讨论】:

以上是关于获取页面中选定的单元格编号的主要内容,如果未能解决你的问题,请参考以下文章

如何从选定的 UICollectionView 单元格中获取数据?

从 DataGridView 选定的单元格中获取文本

从表格小部件中的选定单元格中检索单元格数据

从选定的单元格获取数据(TableView)

Excel使用宏批量向单元格插入指定信息

如何将选定的单元格发送到另一个视图控制器?