iOS 7:离开模态ViewController后键盘没有显示

时间:2014-08-21 19:05:13

标签: ios ios7 keyboard segue modalviewcontroller

我有HomeViewController与其他几个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:与" Done"相关联的位置通过内部事件触摸按钮。

我尝试过的一些事情:

  • 将模态segue转换为push segues可以解决问题,但我不想在任何子视图中使用导航栏
  • 我在解雇时尝试禁用和启用动画 模态视图控制器(使用dismissViewControllerAnimated:
  • 在故事板中使用展开segue而不是以编程方式执行

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

3 个答案:

答案 0 :(得分:1)

  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];
            }
        });
    }
    

答案 1 :(得分:1)

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

@implementation MSLNavigationController

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

@end

该应用程序不需要此代码,因此我已经对该文件进行了修改。 (但是解释为什么这会隐藏键盘会很棒:))

答案 2 :(得分:0)

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

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

当我提出模态时调用textField.resignFirstResponder(),解决了问题。看起来输入字段已被标记为第一响应者,然后不会对新呼叫作出反应。