gpt4 book ai didi

ios - UITextView 在图像附件上时不可滚动

转载 作者:行者123 更新时间:2023-11-29 05:25:36 24 4
gpt4 key购买 nike

我有 UITextViewattributedString 和图像附件。 UITextView 不可编辑,但可选择

问题出在图像附件上。当我开始滚动 UITextView 时,触摸(我的手指)开始触摸图像附件。大多数时候它是不可滚动的。如果我滚动得很快,它就会起作用。但是,如果我将手指放在图像附件上,即使持续时间很短,它也不会滚动。
触摸被识别为对图像附件的选择(在我移开手指后图像会突出显示)。

我尝试禁用 UITextViewisSelectable 属性,问题消失了。但这不是我想要的。我希望它可以在普通文本上选择。

我尝试禁用 UITextView 的所有 UILongPressGestureRecognizer 但没有成功。问题依然存在。

我可以有一个解决方案,让我可以保持可选择状态,并避免图像附件同时占用滚动条吗?提前致谢!

最佳答案

我已经搞定了。

我想在UITextView中,选择是通过UILongPressGestureRecognizer实现的,滚动是通过UIPanGestureRecognizer实现的。
因此,如果我阻止识别长按手势直到平移手势失败,则长按将不再占用滚动。

首先,我有 UITextView 子类。在该子类中,在适当的点循环通过 UIGestureRecognizersUITextView。我是在方法 didMoveToSuperview() 中完成的。

override func didMoveToSuperview() {
if let grs = gestureRecognizers {
for gr in grs {
if gr.isKind(of: UIPanGestureRecognizer.self) {
// set delegate
gr.delegate = self
}
}
}
}

其次,实现UIGestureRecognizerDelegate协议(protocol)中的方法gestureRecognizer(_gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool

extension CustomTextView: UIGestureRecognizerDelegate {    
func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
// all UILongPressGestureRecognizer has to wait UIPanGestureRecognizer to be failed before recognized
if gestureRecognizer.isKind(of: UIPanGestureRecognizer.self) && otherGestureRecognizer.isKind(of: UILongPressGestureRecognizer.self) {
return true
}
return false
}
}

Reference from apple.com

关于ios - UITextView 在图像附件上时不可滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58213485/

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