我目前正在开发一个具有以下结构的应用程序:

我有一个视图控制器,我们将其称为 MainViewController,它处理应用程序的所有触摸事件。MainViewController 有一个名为 canvasView 的视图作为实例变量。canvasView 有一个名为hiddenTextView 的UITextView。

还有其他不可见的视图等,因此 UITextView 不是第一个注册触摸的。

如何让 UITextView 在此配置中注册触摸?特别是从自动更正框中进行选择(实际上它用于日语汉字选择,但我认为它是类似的机制)。

我试过了:

[canvasView.hiddenTextView attemptsBegan:touches withEvent:event]

来自MainViewController 的touchesbegan 方法。我已经为touchesBegan、moved 和Ended 完成了此操作。

我认为它实际上对我尝试过的 50 次左右运行中的一次有效,但我不知道发生了什么变化。

关于如何让它发挥作用有什么想法吗?

有帮助吗?

解决方案

[canvasView.hiddenTextView becomeFirstResponder];

可能会做你想做的事。

iPhone 上的响应者链是一个有点棘手的事情。我发现避免重叠控件通常更容易,因此在任何给定实例中,哪个控件应该从哪些触摸接收输入是完全明确的。

如果您重叠了很多控件,并且经常在隐藏或可见的控件之间切换,这是一个好兆头,表明您可能只想实现更多的子类 UIViewController, ,并在这些之间切换,而不是换入输出和控件。另一种选择是创建自定义子类 UIView 并将它们换入和换出——我的意思是,实际上从子视图中删除旧的(而不是隐藏它),然后添加新的。

当然,有时隐藏/显示比子类化要容易得多。

我希望这有帮助。参考: 苹果 UIResponder 文档. 。(请注意,任何 UIViewController 或者 UIView 是一个子类 UIResponder.)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top