包含UITableView的阵列上的swift iOS筛选器
所以我得到了这个方法,它将CGPoint转换为给定uitableView的indexPath。我在包含uitableview的数组上使用filter方法 我得到了这个方法之外的一个数组,它包含任意数量的UITableView。例如:包含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,
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 {
}