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该文件。 (但解释为什么这将隐藏键盘将是真棒:))
- 你没有打电话给
[super viewDidAppear:animated]
-
就像我有解决方法,工作得很好
- (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字段已被标记为第一响应者,然后将不会对新的调用作出反应。