Ios 辞职的FirstResponder键盘在segue之前不会消失

Ios 辞职的FirstResponder键盘在segue之前不会消失,ios,iphone,objective-c,Ios,Iphone,Objective C,我被难住了,我希望有人能帮助我 我正在调用segue之前我所有五个文本字段的Dimit first responder方法。如果键盘在segue之前可见,则无论我做什么,键盘都会保持不变。这在IOS6中没有发生。这只发生在IOS7中 非常感谢您的帮助 以下是场景: 用户每次触摸一个文本字段以输入数据。键盘在从一个字段切换到下一个字段时没有问题,并且可以从“完成”按钮退出,而不会出现问题。当用户触摸将从选择器视图填充的字段时,就会出现问题。如果键盘在前面的某个文本字段中可见,它不会消失 在两个字段

我被难住了,我希望有人能帮助我

我正在调用segue之前我所有五个文本字段的Dimit first responder方法。如果键盘在segue之前可见,则无论我做什么,键盘都会保持不变。这在IOS6中没有发生。这只发生在IOS7中

非常感谢您的帮助

以下是场景:

用户每次触摸一个文本字段以输入数据。键盘在从一个字段切换到下一个字段时没有问题,并且可以从“完成”按钮退出,而不会出现问题。当用户触摸将从选择器视图填充的字段时,就会出现问题。如果键盘在前面的某个文本字段中可见,它不会消失

在两个字段的
editingdidbeagin
操作中,我有一段代码试图
resignFirstResponder
。我使用这两个字段来保存数字,但我在下一个视图中从选择器填充它们

- (IBAction)txtRatioOrHullTypeTouched:(id)sender 
{    
    // Hide the keyboard before the segue to the picker occurs.
    [self.txtPitch resignFirstResponder];
    [self.txtRPM resignFirstResponder];
    [self.txtSlipOrSpeed resignFirstResponder];
    [self.txtRatio resignFirstResponder];
    [self.txtHullType resignFirstResponder];

    segueToPicker = YES; // Raise flag indicating that this segue is to the picker.
    [self performSegueWithIdentifier:@"toPicker" sender:sender];
}
我还将相同的代码放入
视图将消失
,如下所示:

- (void)viewWillDisappear:(BOOL)animated // Unchanged
{
    // Hide the keyboard before the segue to the picker occurs.
    [self.txtPitch resignFirstResponder];
    [self.txtRPM resignFirstResponder];
    [self.txtSlipOrSpeed resignFirstResponder];
    [self.txtRatio resignFirstResponder];
    [self.txtHullType resignFirstResponder];

    [super viewWillDisappear:animated];
}

这两种方法都位于初始视图ViewController.m文件中

您可以使用文本字段在视图控制器上调用
endEditing:
。您的
视图将消失:
方法将如下所示:

- (void)viewWillDisappear:(BOOL)animated 
{
    [self.view endEditing:YES];

    [super viewWillDisappear:animated];
}

最后,我删除了导致问题的文本字段,并用按钮替换它们。我尝试过的任何场景(几十个)都没有让这段代码在IOS7中按预期工作,即使它在IOS6中工作得完美无缺。

我认为,由于您通过选择器离开视图而不通过出口的方式,您需要在viewController中包括以下内容:

- (BOOL) disablesAutomaticKeyboardDismissal
{
      return NO;
}

斯威夫特,2017年

override var disablesAutomaticKeyboardDismissal: Bool {
    get { return false }
    set { }
}

因此,现在看来,控制键盘的文本字段将不允许辞职。我对该字段使用了canResignFirstResponder查询,结果(布尔值)为FALSE。我还注意到,即使在调用辞职的FirstResponder之后,字段中也会出现一个闪烁的光标拉里J 10月25日13时23分

我知道这很古老,但我有一个类似的问题,我想与大家分享对我有用的东西,以防对其他人有所帮助:


阅读上述评论后,我发现将
[self.view endEditing:YES]
从我在textfielddebeginediting中的位置移动到textfield shouldbeginediting对我来说是个好办法。现在,在我继续之前,键盘已正确关闭。

我尝试了上述所有操作,只要我用一个按钮关闭控制器,键盘就可以正常工作。按下按钮时调用的函数可以调用TextField的resignFirstResponder()函数,一切正常

然而,当执行边缘滑动以关闭控制器时,下次我显示键盘时,键盘会不断弹出。在我的代码中,我在视图之间重用相同的控制器。这可能不明智,但很快

在尝试了互联网上写的关于这方面的所有内容后(虽然不是真的,但非常接近),我发现我可以实现TextField的textViewShouldBeginEditing(),并在ViewControllers ViewDidEnglishe和ViewDidEnglishe之间返回false。这是ha hack,但它在其他方法都不起作用的情况下成功了

我希望这对你们有帮助

Swift代码:

在我的ViewController中

override func viewDidAppear(animated: Bool) {
  super.viewDidAppear(animated)
  myTextField.allowEdit = true
}

override func viewDidDisappear(animated: Bool) {
  super.viewDidDisappear(animated)
  myTextField.allowEdit = false
}
在我的文本字段类中

class MyTextField: UIView, UITextFieldDelegate {
  var allowEdit = true

  func textFieldShouldBeginEditing(textView: UITextView) -> Bool {
    return allowEdit
  }
}

贡献我2美分的价值。在iOS 9.2上正确关闭键盘,这是一个极简示例,仅供参考

...
@property (assign) BOOL isTransitioning;
...

-(void)viewWillAppear:(BOOL) animated {
    self.isTransitioning = YES;
}
-(void)viewWillDisappear:(BOOL) animated {
    self.isTransitioning = YES;
}

-(void)viewDidAppear:(BOOL) animated {
    self.isTransitioning = NO;
}
-(void)viewDidDisappear:(BOOL) animated {
    self.isTransitioning = NO;
}

-(BOOL) textViewShouldBeginEditing:(UITextView*) tv {
  if (self.isTransitioning) {
   return NO;
  } 
return YES;
}

将Zaheer的评论纳入Swift,这对我来说非常有效

 view.endEditing(true)

这是我经常遇到的问题。我最好的应对方法是在键盘下创建一个清晰的按钮,并将该调用作为一个助手。通过切换isHidden属性来控制“清除”按钮。在键盘外轻敲将点击清除按钮并呼叫解除帮助。它不会触发你的segue,用户需要再次点击以导航出去,但键盘会消失

在viewDidLoad()中:

然后添加解雇帮助器:

func dismissHelper(_ sender: UIButton?) {
    self.clearButton.isHidden = true
    view.endEditing(true)
}


func displayClearButton(){
    print("display clear button, hidden = false")
    self.clearButton.isHidden = false
}
然后在文本字段中添加目标

self.textField.addTarget(self, action: #selector(self.displayClearButton), for: .editingDidBegin)

你有没有试过延迟几百毫秒,让键盘有机会动画化?是的,我试过了,我用SLEEP命令试了整整一秒钟,键盘保持不变。好的,下面是我在进一步调查中发现的:使用isFirstResponder方法,我可以看到FirstResponder确实从打开它的其他三个文本字段中的任何一个更改为调用segue的文本字段。因此,现在似乎控制键盘的文本字段不允许辞职。我对该字段使用了canResignFirstResponder查询,结果(布尔值)为FALSE。我还注意到,即使在调用辞职的FirstResponder之后,字段中也会出现一个闪烁的光标;你是英雄@zaheer。
self.textField.addTarget(self, action: #selector(self.displayClearButton), for: .editingDidBegin)