关于stackoverflow的第一个问题......我非常紧张;)
好的,当我触摸其余视图层次结构中的某个位置时,我有麻烦制作我的UITextView resignFirstResponder。 就像这样:
UIView - > UITableView - > UITableCell - > UIView(我的容器视图) - > UIView(我的bubbleview) - >的UITextView
作为UITextView isFirstResponder,我们可以填写一些文字,并显示键盘。如果我们不必通过按下按钮来关闭键盘,那就好了,只需在表面上的某个地方点击UITextView即可。
但是我应该如何以及在哪里回应轻拍手势?并在链中的某个控制器上。我到处都没有对UITextView的引用向它发送消息(resignFirstReponder)...
我希望我能说清楚。如何通过触摸表面上的某个地方来摆脱键盘....
希望有人能给出一些提示......
此致
Jeroen
答案 0 :(得分:2)
当您使用resignFirstResponder在文本字段响应的文本字段之外触摸时,可以使用NSNotificationCenter触发通知。
更详细地编辑:
您可以在UIViewController / View a
上实现以下方法-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
[myTextFeild resignFirstResponder];
...or send a notification etc.
}
这是一种廉价的方式来实现它,但确实有效。
答案 1 :(得分:0)
您可以尝试继承UITextField并重写pointInside。检查收到的触摸以及它是否在UITextField子类实例之外,然后是resignFirstResponder。
编辑: 以上实际上是行不通的,我为糟糕的建议道歉。我建议的是在窗口上添加透明子视图,它覆盖hitTest并调用预定义的回调但返回nil。在回调中,您可以执行一些任意任务(例如从文本视图中重新启动第一个响应者),然后从层次结构中删除该视图。
答案 2 :(得分:0)
我的开源项目https://github.com/Jayway/CWUIKit中有一个名为CWPrimaryViewWindow
的类,它是实现此行为的帮助程序类。
主要想法是将UIWindow
子类化以劫持所有触摸事件。然后禁止所有未定位到主视图的触摸事件,而是触发取消通知。正常情况下将触摸事件传递到主视图。