Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.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
包含UITableView的阵列上的swift iOS筛选器_Ios_Swift_Uitableview - Fatal编程技术网

包含UITableView的阵列上的swift iOS筛选器

包含UITableView的阵列上的swift iOS筛选器,ios,swift,uitableview,Ios,Swift,Uitableview,所以我得到了这个方法,它将CGPoint转换为给定uitableView的indexPath。我在包含uitableview的数组上使用filter方法 我得到了这个方法之外的一个数组,它包含任意数量的UITableView。例如: func convertPointToIndexPath(_ point: CGPoint) -> (UITableView, IndexPath)? { if let tableView = [tableView1, tableView2,

所以我得到了这个方法,它将CGPoint转换为给定uitableView的indexPath。我在包含uitableview的数组上使用filter方法

我得到了这个方法之外的一个数组,它包含任意数量的UITableView。例如:

func convertPointToIndexPath(_ point: CGPoint) -> (UITableView, IndexPath)? {
        if let tableView = [tableView1, tableView2, tableView3].filter({ $0.frame.contains(point) }).first {
            let localPoint = scrollView.convert(point, to: tableView)
            let lastRowIndex = focus?.0 === tableView ? tableView.numberOfRows(inSection: 0) - 1 : tableView.numberOfRows(inSection: 0)
            let indexPath = tableView.indexPathForRow(at: localPoint) ?? IndexPath(row: lastRowIndex, section: 0)
            return (tableView, indexPath)
        }

        return nil
    }
因此,我必须在方法内部进行更改。像这样:

 public var littleKanbanColumnsAsTableViews: [UITableView] = []
现在,当我单击gui上的任何tableView时,我会跟踪该点的坐标,并使用frame.contains(point)方法在所属tableView上对其进行变换

我的问题是过滤器不起作用,无论单击哪个tableView,它总是返回第一个tableView。为什么它不适用于我的LittleKanbanColumnSatableViews数组

一个提示:

if let tableView = littleKanbanColumnsAsTableViews.filter({ $0.frame.contains(point)}).first { ... }
当我直接索引它时,它就工作了。但我希望它取决于哪个tableView包含单击的点

这是我的带有TableView的数组,在本例中,数组包含5个TableView

现在我想从中过滤出tableView,其中包括点击这个tableView的点。我怎样才能做到这一点

为了更好地理解,我添加了ui,如下所示:

当我点击这个tableView时,它会工作,因为它是我的tableView数组中的第一个元素。因此,对于这种情况,convertPointToIndexPath方法是有效的

但是,当我水平滚动到第二个tableView并点击它时,它就不起作用了。因为我认为该方法总是返回第一个元素,但我认为它会根据给定的条件过滤它

问题是什么,为什么条件
{$0.frame.contains(point)}
不起作用?跟踪点的坐标时,它必须定位tableView。

首选解决方案: 在这种情况下,当满足第一个满足条件时,其余的元素不会被遍历

 let tableView = littleKanbanView.littleKanbanColumnsAsTableViews[3]
效率不高的解决方案: 在这种情况下,遍历数组中的所有元素以构建满足条件的表视图数组。然后选择该过滤数组的第一个元素

if let tableView = littleKanbanColumnsAsTableViews.first(where: { $0.frame.contains(point) }) {

}

是否在一个屏幕上显示所有3个表格视图?如果是这样的话,在表视图中使用节会更好。不,我有类似trello的东西。我为scrollview启用了分页,我的表视图在这个scrollview上。每页我只显示一个tableview。
UICollectionView
更适合它。请参阅,但我现在已经在TableView上构建了我的项目。我尝试了您的解决方案,但问题仍然存在。也许问题是另一个。
if let tableView = (littleKanbanColumnsAsTableViews.filter{ $0.frame.contains(point)}).first {

}