iOS 7:离开模式ViewController后键盘不显示

我有一个HomeViewController有不同的模式segues其他几个UIViewControllers 。 如果我试图在HomeView中的UITextField上显示键盘,一切工作正常。 但是,如果我尝试从任何模式视图控制器返回后显示UITextField上的键盘(使用becomeFirstResponder ),键盘从不显示。

以下是我尝试过的一个设置的示例代码:

HomeViewController

 - (void)viewDidAppear:(BOOL)animated { static BOOL firstTimeComplete = false; if (!firstTimeComplete) { firstTimeComplete = true; } else { UITextField *textField = [[UITextField alloc] init]; [self.view addSubview:textField]; [textField performSelector:@selector(becomeFirstResponder) withObject:nil afterDelay:3] } } 

ModalViewController

 - (IBAction)done:(id)sender { [self dismissViewControllerAnimated:YES completion:nil]; } 

在哪里done:通过触摸内部事件链接到“完成”button。

我已经尝试了几件事情:

  • 转换模式segues推推进解决了这个问题,但我不希望任何子视图中的导航栏
  • 我已经尝试禁用和启用animation时closures模式视图控制器(使用dismissViewControllerAnimated:
  • 在故事板中使用展开segues而不是以编程方式进行

任何人都知道可能会发生什么?

删除大量的代码后,我终于发现一个自定义的NavigationController被使用,这是根本原因:

 @implementation MSLNavigationController - (NSUInteger)supportedInterfaceOrientations { return UIInterfaceOrientationPortrait; } - (BOOL)shouldAutorotate { return NO; } @end 

该应用程序不需要这个代码,所以我已经nuked该文件。 (但解释为什么这将隐藏键盘将是真棒:))

  1. 你没有打电话给[super viewDidAppear:animated]
  2. 就像我有解决方法,工作得很好

     - (void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^ { if (self.textView.text.isNotEmpty) { [self.textView becomeFirstResponder]; } }); } 

我一直在努力解决这个问题,所以我会在这里张贴我发现的。

我在viewWillAppear中调用了textField.becomeFirstResponder() ,但是在iOS 7上,在模式被解除之后,即使您点击textField,键盘也不会再显示。

对于我调用textField.resignFirstResponder()模态时,解决了这个问题。 似乎input字段已被标记为第一响应者,然后将不会对新的调用作出反应。