【发布时间】:2010-06-26 17:19:22
【问题描述】:
不处理事件的 UIView 将它们传递到链上。默认情况下,这会将它们传递给它们的父 View,如果没有(最终)处理,则传递给它们的父 UIViewController。
UIScrollView 打破了这一点(关于 SO 有很多问题,主题是“为什么我的应用在添加 UIScrollView 后停止工作?)”
UISV 决定事件是否为自己,如果不是,则将其向下传递(进入其子视图);如果他们不处理该事件,UISV 就会将其丢弃。这就是错误。
在这种情况下,它应该将它们返回到它自己的父视图 - 并最终返回到父 UIVC。 AFAICT,这就是为什么这么多人感到困惑的原因:它没有像记录的那样工作(注意:因为 views 记录在案;UISV 在这件事上只是“未记录” - 它没有声明它的目标是什么在这种情况下做)。
那么……这个错误有简单的修复方法吗?有没有我可以编写的类别来修复 UISV一般 并避免我不得不创建纯粹为了捕获事件并将它们交给他们应该去的地方的“假” UIView 子类? (这使得代码容易出错)
特别是来自 Apple 的文档:
如果时间触发而位置没有显着变化,则滚动视图将跟踪事件发送到内容视图的触摸子视图。如果用户在计时器结束之前将手指拖得足够远,则滚动视图会取消子视图中的任何跟踪并自行执行滚动。
...如果我可以重写“如果计时器触发”方法并正确地实现它,我相信我可以修复我的所有 UISV 实例。
但是: - 苹果会认为这是“使用私有 API”(他们对“私有”的描述在正常编程术语中是荒谬的,我无法理解他们的所作所为,也不是这个意思) - 有谁知道这种方法是什么,或者找到它的好方法? (调试已编译的 ObjC 类以查找符号名称,也许?)
【问题讨论】:
标签: iphone uiview uiviewcontroller uiscrollview