【问题标题】:resignFirstResponder succeeds to hide the keyboard only in some of the casesresignFirstResponder 仅在某些情况下成功隐藏键盘
【发布时间】:2013-03-25 04:34:49
【问题描述】:

我正在使用resignFirstResponder 隐藏数字键盘,但它仅在某些时候隐藏键盘有效:我使用[textField resignFirstResponder]; 实现了backgroundTap,并且在后台点击时,键盘确实被隐藏了。我还在viewWillDisappear 中添加了这一行,但有时它会在那里工作。当用户回到他来自的窗口时,键盘消失了。但是当他进入一个新窗口(不是他来自的那个)时,键盘并没有消失。我使用isFirstResponder 方法检查了调试,在这两种情况下,文本字段确实不再是第一响应者(尽管在其中一种情况下,键盘一直显示,如前所述)。

viewWillDisappear的实现是这样的:

- (void)viewWillDisappear:(BOOL)animated
{
    [super viewWillDisappear:animated];

    [textField resignFirstResponder];
    [self.view endEditing:YES];
}

我想在 viewWillDisappear 两种情况下都隐藏键盘,因为新窗口没有与此键盘相关的文本字段。它有完全不同的元素。

推动另一个视图的事件不是按钮单击,而是开始编辑文本字段。我的视图中有三个文本字段,其中只有一个显示键盘。另外两个推动了另一种观点。这是 textFieldDidBeginEditing 的代码:

-(void)textFieldDidBeginEditing:(UITextField *)textField{
    if (textField1.editing == YES)
    {
        [self performSegueWithIdentifier:@"goToView1" sender:self];
     }
    else if (textField2.editing == YES)
    {
        [self performSegueWithIdentifier:@"goToView2" sender:self];
    }

}

而生成键盘的文本字段是textField3。

关于如何让键盘在这两种情况下消失的一些想法?

【问题讨论】:

  • 你到底想要什么?
  • 我更改了问题的结尾以使其更清楚。
  • 为什么要在viewWillDisappear 中隐藏键盘?

标签: iphone cocoa-touch keyboard uitextfield


【解决方案1】:
- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField
{
     if (textField == textField1)
     {
         [self.view endEditing:YES]; 
         //else you can try with this also.
         [textField performSelector:@selector(resignFirstResponder)
                withObject:nil
                afterDelay:0];
         //
         [self performSegueWithIdentifier:@"goToView1" sender:self];
         return NO;
     }
     else if (textField == textField2)
     {
         [self.view endEditing:YES];
         [self performSegueWithIdentifier:@"goToView2" sender:self];
         return NO;
     }
    return YES;
}

【讨论】:

  • 谢谢,但这没有帮助。
  • @Tomer:您的 TextField 是在主视图中还是在其他视图中?
  • 推送另一个视图的事件不是按钮单击,而是开始编辑文本字段。我的视图中有三个文本字段,其中只有一个显示键盘。另外两个推动了另一种观点。
  • 这是 textFieldDidBeginEditing 的代码:-(void)textFieldDidBeginEditing:(UITextField *)textField{ if (textField1.editing == YES) { [self performSegueWithIdentifier:@"goToView1" sender:self]; } else if (textField2.editing == YES) { [self performSegueWithIdentifier:@"goToView2" sender:self]; } }
  • 而生成键盘的文本域是textField3。
【解决方案2】:

使用此代码检查是否存在任何文本字段并使用它来关闭键盘。根据您的需要进行调整。

for (id elem in self.view.subviews) {
    if ([elem isKindOfClass:[UITextField class]]) {
        [(UITextField *)elem resignFirstResponder];
    }
}

【讨论】:

  • 我在 viewWillDisappear 上添加了这段代码,但键盘仍然出现。
  • 你打开了哪个组件的键盘?
  • 我的方法暗示键盘是由一个textfield打开的,所以如果你有其他组件(比如textview),你也必须在控件中包含这些
  • 我用文本框打开键盘。
  • - (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; for (id elem in self.view.subviews) { if ([elem isKindOfClass:[UITextField class]]) { [(UITextField *)elem resignFirstResponder]; } } }
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-17
  • 1970-01-01
  • 1970-01-01
  • 2012-09-16
  • 1970-01-01
相关资源
最近更新 更多