弹出viewcontroller iOS时短暂出现的键盘

弹出viewcontroller iOS时短暂出现的键盘,ios,objective-c,uiviewcontroller,keyboard,Ios,Objective C,Uiviewcontroller,Keyboard,当从UINavigationController弹出当前UIViewController时,我正在试验数字键盘的一个问题 在我当前的UIViewController中。我有几个UITextField和UINavigationBar中的一个“保存”按钮。预期的行为如下所示: 当用户点击“保存”时,键盘必须隐藏并执行网络操作。在其回调中,将显示UIAlertView。当用户解除此UIAlertView时,将发出通知,当前UIViewController将执行以下操作: [self.navigatio

当从UINavigationController弹出当前UIViewController时,我正在试验数字键盘的一个问题

在我当前的UIViewController中。我有几个UITextField和UINavigationBar中的一个“保存”按钮。预期的行为如下所示:

当用户点击“保存”时,键盘必须隐藏并执行网络操作。在其回调中,将显示UIAlertView。当用户解除此UIAlertView时,将发出通知,当前UIViewController将执行以下操作:

[self.navigationController popViewControllerAnimated:YES];
问题是,如果在键盘仍显示的情况下按下“保存”,则在执行PopViewController激活后,键盘会从左到右短暂显示(就像在以前的UIViewController中显示一样)

我试过了

[myTextField resignFirstResponder]
当用户点击“保存”时,当用户关闭UIAlertView时,甚至在

viewWillDisappear 
方法。其他一些答案建议使用

[self.view endEditing:YES];
但它也不起作用

如果我能使用普通键盘,覆盖它就很简单了

- (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];

    return YES;
}
当用户点击“返回”、“完成”等时隐藏,但作为数字键盘不允许显示“完成”按钮

非常感谢您的帮助,谢谢大家抽出时间来

试试这个:

将文本字段委托及其返回类型设置为“完成”,并将pad设置为“数字pad”

  _textField.delegate = self;
_textField.keyboardType = UIKeyboardTypeDecimalPad;
[_textField setReturnKeyType:UIReturnKeyDone];
现在将按钮添加到键盘:

    -(void)addButtonsToKeyboard
{
    UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
    [keyboardDoneButtonView sizeToFit];


    UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", nil)
                                                                   style:UIBarButtonItemStyleDone target:self
                                                                  action:@selector(kbDoneAction:)];

    UIBarButtonItem* seperatorItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];


    UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel", nil)
                                                                     style:UIBarButtonItemStylePlain target:self
                                                                    action:@selector(kbCancelAction:)];


    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:cancelButton,seperatorItem, doneButton, nil]];
    _textField.inputAccessoryView = keyboardDoneButtonView;
}
    - (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
要隐藏键盘,请执行以下操作:

    -(void)addButtonsToKeyboard
{
    UIToolbar* keyboardDoneButtonView = [[UIToolbar alloc] init];
    [keyboardDoneButtonView sizeToFit];


    UIBarButtonItem* doneButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Done", nil)
                                                                   style:UIBarButtonItemStyleDone target:self
                                                                  action:@selector(kbDoneAction:)];

    UIBarButtonItem* seperatorItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:self action:nil];


    UIBarButtonItem* cancelButton = [[UIBarButtonItem alloc] initWithTitle:NSLocalizedString(@"Cancel", nil)
                                                                     style:UIBarButtonItemStylePlain target:self
                                                                    action:@selector(kbCancelAction:)];


    [keyboardDoneButtonView setItems:[NSArray arrayWithObjects:cancelButton,seperatorItem, doneButton, nil]];
    _textField.inputAccessoryView = keyboardDoneButtonView;
}
    - (BOOL)textFieldShouldReturn:(UITextField *)textField
{
    [textField resignFirstResponder];
    return YES;
}
您的完成操作方法是:

    -(void)kbDoneAction:(id)sender
{
    [_textField resignFirstResponder];
}
    -(void)kbCancelAction:(id)sender
{
[_textField resignFirstResponder];
    }
取消操作的方法是:

    -(void)kbDoneAction:(id)sender
{
    [_textField resignFirstResponder];
}
    -(void)kbCancelAction:(id)sender
{
[_textField resignFirstResponder];
    }

我也有类似的情况。我最终将
popViewControllerAnimated
延迟了比键盘动画持续时间稍长的时间(
0.333
秒)。

您需要将“完成/取消”按钮添加到数字键盘上。使用[self.view endEditing:YES];在[self.navigationController PopViewControllerInitiated:是]之前@我试过[myTextField setReturnKeyType:UIReturnKeyDone];但事实并非如此work@Dev我也试过了,但我的答案都不起作用。我刚刚发布了它,别忘了在ViewDidLoad上调用addButtons方法仍然不起作用。作为一种解决方法,我在调用kDoneAction之前禁用了save按钮,但在点击“save”时它忽略了隐藏它的意义