【问题标题】:iOS 7: Keyboard not showing after leaving modal ViewControlleriOS 7:离开模态 ViewController 后键盘不显示
【发布时间】:2014-10-15 13:04:52
【问题描述】:

我有一个HomeViewController,它与其他几个UIViewControllers 有不同的模态segues。如果我尝试在 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: 通过内部修饰事件链接到“完成”按钮。

我尝试过的一些事情:

  • 将模态转场转换为推送转场可以解决问题,但我不希望在任何子视图中出现导航栏
  • 我尝试在关闭 模态视图控制器(使用dismissViewControllerAnimated:
  • 在情节提要中使用展开转场而不是以编程方式进行

有人知道可能发生了什么吗?

【问题讨论】:

  • 不看源代码,很难提出任何建议。
  • 添加了一些代码,如果代码的任何其他部分可能相关,请告诉我
  • 我正在使用完全相同的代码,当我在应用程序中运行它时,显示模式,然后关闭它,3 秒后键盘出现。 dropbox.com/s/iimz6c7ooq68lxr/…
  • 1) 你没有调用 [super viewDidAppear:animated] 2) 我有下一个解决方法:
  • 感谢迈克的信息!这可能也是我应该尝试的。我正在帮助某人完成现有项目,所以我会尝试删除代码,直到找出导致它的特定行。

标签: ios ios7 keyboard segue modalviewcontroller


【解决方案1】:

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

@implementation MSLNavigationController

- (NSUInteger)supportedInterfaceOrientations
{
    return UIInterfaceOrientationPortrait;
}

- (BOOL)shouldAutorotate
{
    return NO;
}

@end

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

【讨论】:

  • 我在 iOS7 中遇到了同样的问题!你的解决方案奏效了!谢谢!
【解决方案2】:
  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];
            }
        });
    }
    

【讨论】:

    【解决方案3】:

    我已经为这个问题苦苦挣扎了一段时间,所以我将在这里发布我发现的内容。

    我在viewWillAppear 中调用了textField.becomeFirstResponder(),但在iOS 7 上,模式被关闭后,即使您点击文本字段,键盘也不会再次显示。

    当模态出现时,我打电话给textField.resignFirstResponder(),解决了这个问题。似乎输入字段已被标记为第一响应者,然后不会对新呼叫做出反应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-17
      • 2013-06-27
      • 2014-07-16
      • 2014-10-16
      • 2015-09-09
      • 1970-01-01
      相关资源
      最近更新 更多