我想,当我的UITextField外的用户触摸,使用这种方法来摆脱键盘的:
- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[mainTextController resignFirstResponder];
[super touchesBegan:touches withEvent:event];
}
然而,这似乎需要一个被按下键盘上的回车键后调用的方法,但我只是想在键盘消失,不按我的回报。 我怎样才能做到呢?
谢谢!
编辑:tGilani的答案是最直接的方式,用得好好的,不改变以UIControl。 但我想jonkroll的答案也适用。
尝试
[self.view endEditing:YES];
更新:
取一个布尔值,并将其设置为false在init方法。 在您的textFieldShouldReturn
委托方法方法,执行代码,如果是假的,否则跳过
- (BOOL) textFieldShouldReturn:(UITextField*)textField
{
if (!boolean)
{
// YOur code logic here
}
boolean = false;
}
在你的方法,你调用endEditing方法,设定布尔为true。
boolean = YES;
[self.view endEditing:YES];
以下是我之前已经处理了这个。 首先创建视图控制器上的方法,将通过辞职对你的文本字段第一响应状态消除键盘:
- (IBAction)dismissKeyboard:(id)sender
{
[mainTextController resignFirstResponder];
}
接下来,在你的故事板现场为您的ViewController
(或nib
,如果您使用的不是故事板)更改类你的ViewController的的view
,从财产UIView
到UIControl
。 该view
属性实际上是背后的其他UI元素的背景。 类的类型需要改变,因为UIView
无法响应触摸事件,但UIControl
(这是一个直接的子类UIView
)可以回应他们。
最后,在您的视图控制器的viewDidLoad:
方法,告诉你的视图控制器来执行你的dismissKeyboard
当视图接收的方法UIControlEventTouchDown
事件。
- (void)viewDidLoad
{
[super viewDidLoad];
UIControl *viewControl = (UIControl*)self.view;
[viewControl addTarget:self action:@selector(dismissKeyboard:) forControlEvents:UIControlEventTouchDown];
}
编辑:
您关注的部分似乎是textFieldDidEndEditing:
当键盘被驳回被调用。 这是不可避免的,它总是会当一个文本字段失去焦点时调用(即第一响应状态)。 这听起来像你的问题是,你已经把代码,当用户点击返回按钮进行textFieldDidEndEditing:
如果你不希望这样的代码,当用户触摸文本字段之外运行,这不是把它放在适当的位置。
相反,我会把这些代码在一个单独的方法:
- (IBAction)textFieldReturn:(id)sender
{
if ([mainTextController isFirstResponder]) {
[mainTextController resignFirstResponder];
// put code to run after return key pressed here...
}
}
}
然后调用通过目标-动作该方法时,你的文本字段发送控制事件UIControlEventEditingDidEndOnExit
。
[mainTextController addTarget:self action:@selector(textFieldReturn:) forControlEvents:UIControlEventEditingDidEndOnExit];
需要注意的是UIControlEventEditingDidEndOnExit
比不同UIControlEventEditingDidEnd
。 前者称为编辑由控制范围之外的用户触摸结束时,用户按下回车键,编辑结束时后者被调用。
您需要更改您的ViewController's
从视图属性UIView
到UIControl
使用Identity检查:
从那里,你只需创建IBAction
,并告诉文本框解雇(这我假设你mainTextController
)。 如果mainTextController
是不是你想要的键盘解雇然后更改文本字段resignFirstReaponder
方法您的文本框,如下所示。
- (IBAction)backgroundTap:(id)sender {
[myTextField resignFirstResponder];
}
然后再从那里返回到您查看位指示的.xib
文件和连接动作来控制查看并选择“向下触摸”。