我的应用程序有时会忘记应该由哪个响应者处理触摸事件。
我的情况:
- XIB 文件定义了 3 个 View :
- 一个 View 作为文件所有者的 View
- 2 个以编程方式添加到 View 层次结构的额外 View
- 其中一个 subview (SubviewA) 有一个
UIButton
,配置为在“Touch Up”时将myAction:
选择器发送到FirstResponder
检测到内部”事件 - SubviewA 知道如何处理
myAction:
99% 的时间,一切都很好。当用户点击按钮时,SubviewA 会处理 myAction:
消息,一切正常。但时不时地,用户提示按钮“卡住”,实际上我自己复制了几次,但未能找到一个明确的场景来使其按需发生。
到目前为止我的调查是:
- 当点击按钮没有任何反应时:
- 我的按钮检测到点击,因为它在按下时突出显示
myAction:
未在 SubviewA 上调用- UI 的其余部分保持响应
我所说的代码是一些我试图修复的遗留代码。让 View 响应其 subview 之一的事件对我来说听起来像是一种奇怪的架构。到目前为止,我一直使用 File's Owner 来处理触摸事件,因此我指出 Responder Chain 是导致错误的理想人选。但是我找不到为什么!根据我的理解,由于按钮不知道如何处理消息并且没有附加 View Controller ,它应该将它转发到它的 super View (ButtonA,它知道如何处理它)!
我的问题是:
- 知道错误可能来自哪里吗? (响应者链?)
- 关于 View 是应该自己处理其按钮行为还是应该由 View Controller 来处理,有什么意见吗?
编辑: 我有一个关于如何修复错误的想法:将按钮操作直接连接到 SubviewA 而不是在 Interface Builder 中使用 FirstResponder。我发布这个问题的原因是想了解为什么响应者链有时不工作。
最佳答案
你能不能让 SubviewA 成为 FirstResponder 然后在完成后放弃它?
关于ios - 1% 的时间未处理 UIButton 事件 : who should I blame in my responder chain?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9417844/