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