iphone UITextView 手动注册触摸

Posted

技术标签:

【中文标题】iphone UITextView 手动注册触摸【英文标题】:iphone UITextView manually registerring touches 【发布时间】:2009-08-11 08:44:42 【问题描述】:

我目前正在开发具有这种结构的应用程序:

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

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

如何让 UITextView 在此配置中注册触摸?专门从 autoCorection 框中进行选择(实际上它用于日文汉字选择,但我认为它的机制类似)。

我试过了:

[canvasView.hiddenTextView touchesBegan:touches withEvent:event]

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

我认为它确实适用于我尝试过的 50 次左右的运行中的一次,但我不知道发生了什么变化。

关于如何让它发挥作用的任何想法?

【问题讨论】:

【参考方案1】:
[canvasView.hiddenTextView becomeFirstResponder];

可能会做你想做的事。

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

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

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

我希望这会有所帮助。参考:Apple's UIResponder docs。 (请注意,任何UIViewControllerUIView 都是UIResponder 的子类。)

【讨论】:

UITextView 已经是那个时候的第一响应者了,键盘已经启动,一切正常。无论如何都尝试过,但仍然没有:(。我也尝试过使用 [[self nextResponder] touchesBegan.....],这在其他将触地传递到其他层但不是这次的情况下对我有用。 另一个想法:仔细检查你的 UITextView 的框架和它的超级视图。我有一个案例,我的控制清晰可见,但没有任何接触。问题原来是它的框架有大小(0,0)。除非触摸在他们的框架中,否则响应者似乎不会被触摸。 嘿泰勒,感谢您的回复。我最终只是将所有 hiddenTextView 内容移动到顶视图控制器,并确保 hiddenTextView 是最前面的子视图。然后 UIResponder 的东西自己处理,在使它成为第一响应者之后,不需要进一步的触摸转发。我希望 UIKit API 更透明一点:( 很高兴你得到它!抱歉,如果我不能提供更快的解决方案。

以上是关于iphone UITextView 手动注册触摸的主要内容,如果未能解决你的问题,请参考以下文章

将光标放在用户触摸的 UITextView 上

将 UITapGestureRecognizer 触摸传递到底层 UITableViewCell

如何通过保持选择所有 UITextview 内容并通过编程方式 iphone 显示复制选项?

禁用 UIButton 注册触摸并引发错误

如何获取 UItextview 触摸坐标位置

iOS 5 SDK UITextView 限制/错误?