键盘和光标显示,但我无法在UITextFields和UITextViews中输入

时间:2012-09-16 14:51:49

标签: ios delegates keyboard uitextfield uitextview

在iOS 6 GM的iPad上。我有6个UITextFields,3个UITextViews和一个触发popover / actionsheet的UIButton。

当我选择其中一个UITextFields或UITextViews时,会弹出键盘并显示光标,但我无法输入文字。如果我按下UIButton来显示弹出框,然后在它外面点击以解除它并返回到UITextFields或UITextViews,它们就可以工作。

我有UITextxxxx.delegate = self;为所有人设定。在我的.h文件中的xibs,UITextFieldDelegate和UITextViewDelegate中选中了“Enabled”和“User Interaction Enabled”以及:

- (BOOL)disablesAutomaticKeyboardDismissal {
    return NO;
}


- (BOOL)textFieldShouldBeginEditing:(UITextField *)textField {

    return YES;

}

- (BOOL)textFieldShouldEndEditing:(UITextField *)textField {

    return YES;

}

- (IBAction)textFieldReturn:(id)sender {

    [sender resignFirstResponder];
}



- (BOOL)textViewShouldBeginEditing:(UITextView *)textView {

    if (textView == notestextView){
        [notestextView becomeFirstResponder];
    }
    if (textView == notestextViewTwo){
        [notestextViewTwo becomeFirstResponder];
    }
    if (textView == notestextViewThree){
        [notestextViewThree becomeFirstResponder];
    }

    return YES;

}

- (BOOL)textViewShouldEndEditing:(UITextView *)textView {

    return YES;

}

我甚至试过[xxxxxxx becomeFirstResponder];在viewDidLoad中。弹出键盘并在运行时将光标放在字段中,但在点击UIButton显示弹出框之前,我仍然无法输入。

任何人都知道为什么我不能输入字段以及为什么要使用popover“修复它”?

更新9月18日:我在我的应用中推了一个新视图,它只有一个带有textfield和textview的视图。代表们都已成立。相同的行为。键盘和光标出现,但没有输入。这排除了popovercontroller搞乱事情。

我强烈开始认为这是一个iOS 6错误。这与我在iOS 4和5上的应用程序的iPhone版本中的视图非常相似,我从来没有遇到过问题。 iPhone和iPad版本之间的唯一区别在于图像拾取器的呈现方式。您必须使用iPad的弹出窗口。这就是为什么我认为popover代表与它有关。

在iOS 6中实现我不知道的UITextFields和UITextViews之间是否存在任何根本区别?似乎不太可能。

如果它有助于我的应用流程如下:

  

带10个按钮的主视图

     
      
  • 每个按钮通过导航控制器推送一个tableview
  •   
  • tableviews推送详细信息视图 - textfields和textviews展示上述行为
  •   
  • tableview还有一个添加按钮,用于推送模态视图以添加新项目 - textfields和textview展示上述行为
  •   

7 个答案:

答案 0 :(得分:38)

这最初是在iOS 5上构建的iPhone应用程序。为了使其成为iPad应用程序,我只是复制了项目并将所有.xibs升级到iPad版本。我不知道这是不是一个bug,或者它是否与升级到iOS 6有关,但这样做会让MainWindow.xib混淆。

在MainWindow xib中,我输入"MainViewController"作为标题(以前是空白的。)

enter image description here

并检查"Visible at Launch"。即使它在发布时已经可见,但没有检查过的东西。

enter image description here

现在我的所有文字观看和文字字段都有效。

答案 1 :(得分:13)

我遇到了同样的问题,请确保应用代表有一个[self.window makeKeyAndVisible]。这解决了我。

答案 2 :(得分:2)

对我来说,你的解决方案不起作用,所以我找到了另一个。

我正在使用Revmob广告,因此在启动应用时会加载全屏视图和横幅视图。 Revmob使用一些工作人员在所有viewcontrollers中显示相同的横幅,我认为这是问题。当我禁用revmob时,我可以在文本字段中添加文本。

答案 3 :(得分:2)

这显然是iOS 6中的错误。只需将[searchBar becomeFirstResponder];放入searchBarTextDidBeginEditing方法:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    if (!self.window.isKeyWindow) {
        [self.window makeKeyAndVisible];
    }
}

此解决方案适合我。

答案 4 :(得分:0)

这些解决方案对我不起作用,但在我删除~/Library/Developer/Xcode/DerivedData/AppName处的派生数据文件夹后,它确实有效。

答案 5 :(得分:0)

为了澄清其他答案,您无法将文本输入到未设置为关键窗口的窗口。大多数应用程序只使用一个窗口,或者在其他窗口上没有文本输入,所以永远不会遇到这个问题。

处理多个窗口时,确保在切换焦点时resignKeyWindow + makeKeyWindow,非常重要的是,之后恢复关键窗口!

答案 6 :(得分:0)

dispatch_async(dispatch_get_main_queue(),^{});

中尝试使用firstFirstResponder