了解resignFirstResponder用的UITextField(Understanding

2019-07-30 22:44发布

我想,当我的UITextField外的用户触摸,使用这种方法来摆脱键盘的:

- (void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    [mainTextController resignFirstResponder];
    [super touchesBegan:touches withEvent:event];
}

然而,这似乎需要一个被按下键盘上的回车键后调用的方法,但我只是想在键盘消失,不按我的回报。 我怎样才能做到呢?

谢谢!

编辑:tGilani的答案是最直接的方式,用得好好的,不改变以UIControl。 但我想jonkroll的答案也适用。

Answer 1:

尝试

[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];


Answer 2:

以下是我之前已经处理了这个。 首先创建视图控制器上的方法,将通过辞职对你的文本字段第一响应状态消除键盘:

- (IBAction)dismissKeyboard:(id)sender
{
    [mainTextController resignFirstResponder];
}

接下来,在你的故事板现场为您的ViewController (或nib ,如果您使用的不是故事板)更改类你的ViewController的的view ,从财产UIViewUIControl 。 该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 。 前者称为编辑由控制范围之外的用户触摸结束时,用户按下回车键,编辑结束时后者被调用。



Answer 3:

您需要更改您的ViewController's从视图属性UIViewUIControl使用Identity检查:

从那里,你只需创建IBAction ,并告诉文本框解雇(这我假设你mainTextController )。 如果mainTextController是不是你想要的键盘解雇然后更改文本字段resignFirstReaponder方法您的文本框,如下所示。

- (IBAction)backgroundTap:(id)sender {
[myTextField resignFirstResponder];
}

然后再从那里返回到您查看位指示的.xib文件和连接动作来控制查看并选择“向下触摸”。



文章来源: Understanding resignFirstResponder with UITextField