gpt4 book ai didi

ios - 在具有部分索引的 UITableView 上使用从右到左的 UIScreenEdgePanGestureRecognizer

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:08:49 24 4
gpt4 key购买 nike

我想将 UIScreenEdgePanGestureRecognizer 添加到 UITableView,以便我可以从右侧边缘滑动以转到 Controller 层次结构中的下一个屏幕。

这工作正常,除非 TableView 在侧面显示了部分索引。在这种情况下,部分索引区域会处理触摸,因此我无法从边缘滑动。我希望能够同时支持边缘平移和部分索引点击以及垂直平移功能。

我尝试在 UITableView 之上添加一个 View 来处理滑动,但随后它处理了所有触摸并且表格 View 不再获得任何东西。

最佳答案

好的,所以我尝试了很多东西并提出了一个不理想但可行的解决方案。

问题的第一部分是部分索引作为 UITableView 的 subview 在其自己的 View 中。因此它会捕获您可能添加到 UITableView 的任何触摸或手势识别器。

第二个问题是部分索引 View 不是公共(public) API 的一部分。

所以我的解决方案是在部分索引 View 中添加一个 UIScreenEdgePanGestureRecognizer。

View 是私有(private)类 UITableViewIndex 的一个实例。为了得到它,我创建了一个 UITableView 扩展:

extension UITableView {
var sectionIndexView: UIView? {
for view in self.subviews {
if view.className() == "UITableViewIndex" {
return view
}
}
return nil
}
}

注意 上面的代码是脆弱的并且不是面向 future 的,因为如果 Apple 更改了类名或其在 View 层次结构中的位置,它将不再有效。在我的例子中,边缘滑动是一个方便的功能,屏幕顶部有一个“下一步”按钮。此外,我的大多数 View Controller 都没有表索引,所以如果它停止工作,它只会出现在几个屏幕上。因此,如果此解决方案在未来不起作用,那也没什么大不了的。

我还写了一个方便的函数来从任何 View 获取边缘手势识别器:

extension UIView {
var screenEdgePanGestureRecognizer: UIScreenEdgePanGestureRecognizer? {
guard let gestures = self.gestureRecognizers else {
return nil
}
for gesture in gestures {
if let edgePan = gesture as? UIScreenEdgePanGestureRecognizer {
return edgePan
}
}
return nil
}
}

我在 View Controller 的 viewDidLoad 方法中将 UIScreenEdgePanGestureRecognizer 添加到 UITableView

最后,在我的 View Controller 的 viewDidAppear 中,我检查手势识别器是否已添加到部分索引 View 中。如果还没有,那么我将其添加到那里。您需要在将部分索引添加到 TableView 后的某个时间点执行此操作 - 即不在 viewDidLoad 中。并且您需要确保没有多次添加手势识别器。

关于ios - 在具有部分索引的 UITableView 上使用从右到左的 UIScreenEdgePanGestureRecognizer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45308875/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com