UITapGestureRecognizer并在点击背景时使键盘消失

Coc*_*Dev 2 uikeyboard ios4 ios

我创建了一个表单,并在输入与您的年龄相似的数据时出现键盘(仅限数字).

当用户点击背景时,我希望键盘消失,我想在7(零旁边)的空插槽中添加"完成"按钮.(我使用数字键盘键盘)

我找到了这个例子,但我有几个问题.

-(void)viewDidLoad
{
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self                                                                       action:@selector(dismissKeyboard)];  [self.view addGestureRecognizer:tap]; 
}

-(void)dismissKeyboard
{
[aTextField resignFirstResponder];
[aTextField1 resignFirstResponder];
[aTextField2 resignFirstResponder];
[aTextField3 resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)

如果我的表单中有多个文本字段.我是否需要在dismissKeyboard方法中编写每个文本字段?

ban*_*isa 14

简单的方法是使用UIView中提供的方法

- (BOOL) endEditing:(BOOL)force;
Run Code Online (Sandbox Code Playgroud)

此方法查看当前第一个响应者的文本字段的当前视图及其子视图层次结构.如果找到一个,则要求该文本字段作为第一响应者辞职.如果force参数设置为YES,则永远不会询问文本字段; 它被迫辞职.

所以这样做:

-(void)dismissKeyboard {
     [self.view endEditing:YES];
}
Run Code Online (Sandbox Code Playgroud)

它将支持您在页面上添加的任何更多文本字段(当然,在UIView下)


Nek*_*kto 5

你应该只发送dismissKeyboardtextField您当前正在编辑.

在你的代码中你有内存泄漏.更好地使用这个:

-(void)viewDidLoad
{
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(dismissKeyboard)];
    [self.view addGestureRecognizer:tap]; 
    [tap release];
}
Run Code Online (Sandbox Code Playgroud)

要检查UITextField当前是否在edit mode您可以检查其财产:

一个布尔值,指示文本字段当前是否处于编辑模式.(只读)

@property(nonatomic, readonly, getter=isEditing) BOOL editing
Run Code Online (Sandbox Code Playgroud)

例如,您有3个文本字段,然后dismissKeyboard将如下所示:

-(void)dismissKeyboard
{
    UITextField *activeTextField = nil;
    if ([textField1 isEditing]) activeTextField = textField1;
    else if ([textField2 isEditing]) activeTextField = textField2;
    else if ([textField3 isEditing]) activeTextField = textField3;
    if (activeTextField) [activeTextField resignFirstResponder];
}
Run Code Online (Sandbox Code Playgroud)