获取页面中选定的单元格编号
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。
【讨论】:
以上是关于获取页面中选定的单元格编号的主要内容,如果未能解决你的问题,请参考以下文章