Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 滚动后在UITableView中检测当前顶部单元格_Iphone_Objective C_Cocoa Touch_Ipad_Uitableview - Fatal编程技术网

Iphone 滚动后在UITableView中检测当前顶部单元格

Iphone 滚动后在UITableView中检测当前顶部单元格,iphone,objective-c,cocoa-touch,ipad,uitableview,Iphone,Objective C,Cocoa Touch,Ipad,Uitableview,一个简单的问题,但我似乎没有合适的术语来搜索它 我有一个没有分区的UITableView,用户可以在这个tableview中上下滚动一长串数据(行) 问题:在用户滚动后,如何检测最顶端的单元格行数。 (例如,如果用户向下滚动30个单元格,滚动后的顶部单元格为=30)您可以尝试使用UITableView的-indexPathsForVisibleRows或-indexPathForRowAtPoint 例如,假设您希望在停止拖动表时打印最上面可见单元格的indexPath。你可以这样做: - (v

一个简单的问题,但我似乎没有合适的术语来搜索它

我有一个没有分区的UITableView,用户可以在这个tableview中上下滚动一长串数据(行)

问题:在用户滚动后,如何检测最顶端的单元格行数。
(例如,如果用户向下滚动30个单元格,滚动后的顶部单元格为=30)

您可以尝试使用
UITableView
-indexPathsForVisibleRows
-indexPathForRowAtPoint

例如,假设您希望在停止拖动表时打印最上面可见单元格的indexPath。你可以这样做:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSIndexPath *firstVisibleIndexPath = [[self.tableView indexPathsForVisibleRows] objectAtIndex:0];
    NSLog(@"first visible cell's section: %i, row: %i", firstVisibleIndexPath.section, firstVisibleIndexPath.row);
}
适用于Swift 3.0

let topVisibleIndexPath:IndexPath = self.tableView.indexPathsForVisibleRows![0]

您可以获得可见行的索引路径

NSArray* indexPaths = [tableView indexPathsForVisibleRows];
然后使用
compare:

NSArray* sortedIndexPaths = [indexPaths sortedArrayUsingSelector:@selector(compare:)];
然后获取第一个元素的行

NSInteger row = [(NSIndexPath*)[sortedIndexPaths objectAtIndex:0] row];

这是Swift 3+代码:

override func scrollViewDidEndDragging(_ scrollView: UIScrollView, willDecelerate decelerate: Bool) {
    let firstVisibleIndexPath = self.tableView.indexPathsForVisibleRows?[0]
    print("First visible cell section=\(firstVisibleIndexPath?.section), and row=\(firstVisibleIndexPath?.row)")
}

在Swift 4中:

func tableView(tableView:UITableView,willDisplay单元格:UITableView单元格,forRowAt indexath:indexPath){
让firstVisibleIndexPath=self.tableview.indexPathsForVisibleRows?[0]
打印(“顶部可见单元格部分为\”([firstVisibleIndexPath!.section]))
}

我会对数组进行排序,因为文档中没有(据我所知)说明索引路径是按升序排序的。这是一个不同的问题,但请检查
tableView ScrollToRowtaIndexPath
注意,
[self.tableView IndexPaths ForVisibleRows]
当用户滚动启用弹跳功能的表格视图时,可能为空,就像小鸡在加速一样。因此,请确保检查该方法是否返回了至少1个索引路径。此解决方案适用于
UICollectionView
s以及
UITableView
s