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