在我们的应用程序中,用户可以在文本框中输入内容,然后按后退按钮返回主屏幕。
如果我们在iOS 7上运行它,键盘不会消失,它只会停留在那里。用户仍然可以浏览应用程序,但所有文本字段都被禁用,这意味着您无法在任何地方输入文本。用户唯一的选择就是杀死应用并重新开始。
我们尝试添加resignFirstResponder
条消息,但这没有任何帮助。
涉及的代码很多,我们正在积极处理这个问题。与此同时,也有人遇到过这个问题,也许有办法让它消失?
答案 0 :(得分:8)
当我为iOS 7编译应用程序时,我遇到了和你一样的问题,我做了以下更改:
请确保在解除viewController之前添加[textfield resignFirstResponder]
,例如:
[_passwordInput resignFirstResponder];
[_emailInput resignFirstResponder];
[self performSegueWithIdentifier:@"forgotPassword" sender:self];
为了确保键盘消失,请在[textfield resignFirstResponder]
中添加viewWillDisappear
,例如:
- (void) viewWillDisappear:(BOOL)animated
{
[_passwordInput resignFirstResponder];
[_emailInput resignFirstResponder];
}
如果您的viewController使用UIModalPresentationFormSheet
呈现,请将此添加到您的viewController,以确保文本字段将响应resignFirstResponder
:
- (BOOL)disablesAutomaticKeyboardDismissal
{
return NO;
}
在您的情况下,覆盖后退按钮操作或仅使用viewWillDisappear
检查用户何时按下后退按钮,然后在resignFirstResponder
[super viewWillDisappear]
之前调用-(void) viewWillDisappear:(BOOL)animated
{
[_passwordInput resignFirstResponder];
[_emailInput resignFirstResponder];
[super viewWillDisappear:animated];
}
:
{{1}}
答案 1 :(得分:0)
在viewWillDisappear上尝试[self.view resignFirstResponder]
,而不是[textfield resignFirstResponder]
。
答案 2 :(得分:0)
[textfield resignFirstResponder]应该完成这项工作,但要确保并且不要遍历你可以使用的所有textField:
[self.view endEditing:YES];
来自doc:
用于制作视图或第一个响应者辞职的任何子视图 (可选择强制)。
答案 3 :(得分:0)
一般来说我觉得这很有用
[[UIApplication sharedApplication] sendAction:@selector(resignFirstResponder) to:nil from:nil forEvent:nil];
您可以在viewWillDisappear:
或viewDidDisappear:
这将隐藏键盘而不引用当前聚焦的文本字段
答案 4 :(得分:0)
我在MoreViewController
(UITabBarController
)中仅与iOS 8.3
有同样的问题。也许这个解决方案不是很“好”而且有点复杂,但似乎它很有用,希望它也能帮到你。
@interface ViewController ()
@property (nonatomic) BOOL needToHideKeyboard;
@property (nonatomic, strong) IBOutlet UITextField *txtField;
@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@end
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWasShown:) name:UIKeyboardDidShowNotification object:nil];
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillBeHidden:) name:UIKeyboardWillHideNotification object:nil];
}
- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
self.needToHideKeyboard = NO;
}
- (void)viewWillLayoutSubviews
{
[super viewWillLayoutSubviews];
[self hideKeayboard];
}
- (void)hideKeayboard
{
if (self.needToHideKeyboard) {
[self.txtField resignFirstResponder];
}
}
- (void)keyboardWasShown:(NSNotification *)notification
{
self.needToHideKeyboard = YES;
NSDictionary *info = [notification userInfo];
CGSize keyboardSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
// Shift scroll view content insets on the keyboard height
UIEdgeInsets contentInsets = self.scrollView.contentInset;
contentInsets.bottom = keyboardSize.height;
self.scrollView.contentInset = contentInsets;
}
- (void)keyboardWillBeHidden:(NSNotification *)notification
{
self.needToHideKeyboard = NO;
// Reset keyboard content insets
UIEdgeInsets contentInsets = self.scrollView.contentInset;
contentInsets.bottom = [self.bottomLayoutGuide length];
self.scrollView.contentInset = contentInsets;
}
@end
答案 5 :(得分:0)
如果视图控制器实现textFieldDidEndEditing
,请确保在视图消失时不将另一个视图设置为第一个响应者。当您致电textFieldDidEndEditing
或resignFirstResponder
时,系统会调用[self.view endEditing:YES]
。
答案 6 :(得分:0)
[self.view endEditing:YES];
停止使用我的设备iOS9.x
我们也可以在viewWillDisappear
方法
for (UIView *subview in self.view.subviews) {
if ([subview canPerformAction:@selector(endEditing:) withSender:nil]) {
[subview endEditing:YES];
}
if ([subview canResignFirstResponder]) {
[subview resignFirstResponder];
}
}
这将循环响应者并重新响应响应者状态。