【问题标题】:Keyboard and cursor show, but I can't type inside UITextFields and UITextViews键盘和光标显示,但我无法在 UITextFields 和 UITextViews 内输入
【发布时间】:2012-09-08 23:56:10
【问题描述】:

在装有 iOS 6 GM 的 iPad 上。我有 6 个 UITextFields、3 个 UITextViews 和一个触发弹出框/操作表的 UIButton。

当我选择 UITextFields 或 UITextViews 之一时,键盘弹出并出现光标,但我无法输入文本。如果我按下 UIButton 以显示弹出框,然后在其外部点击以将其关闭并返回 UITextFields 或 UITextViews,它们就可以工作。

我有 UITextxxxx.delegate = self;为所有人设置。在我的 .h 文件中的 xib、UITextFieldDelegate 和 UITextViewDelegate 中勾选了“已启用”和“已启用用户交互”以及:

- (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 以显示弹出框。

任何人都知道为什么我不能在字段中输入以及为什么调用弹出框“修复它”?

更新 9/18:我在我的应用程序中推送了一个新视图,该视图只有一个带有文本字段和文本视图的视图。代表已全部成立。相同的行为。键盘和光标出现,但没有打字。这排除了 popovercontroller 搞砸的事情。

我开始强烈认为这是 iOS 6 的错误。这与我在 iOS 4 和 5 上我的应用程序的 iPhone 版本中的视图几乎相同,而且我从来没有遇到过问题。 iPhone 和 iPad 版本之间的唯一区别是图像选择器的呈现方式。您必须为 iPad 使用弹出框。这就是为什么我认为弹出框代表与它有关。

在 iOS 6 中实现 UITextFields 和 UITextViews 之间有什么我不知道的根本区别吗?似乎不太可能。

如果它有助于我的应用程序像这样流动:

带有 10 个按钮的主视图

  • 每个按钮通过导航控制器推动一个表格视图
  • tableviews 推送详细视图 - textfields 和 textviews 表现出上述行为
  • tableview 也有一个添加按钮,用于推动模态视图以添加新项目 - 文本字段和文本视图表现出上述行为

【问题讨论】:

  • 刚刚发现了“(UITextView *)textField”的错别字,但这并没有解决任何问题。

标签: ios delegates keyboard uitextfield uitextview


【解决方案1】:

尝试在dispatch_async(dispatch_get_main_queue(),^{});中成为FirstResponder

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

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

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

        并检查了"Visible at Launch"。即使它在发布时已经可见,但如果不检查它就会搞砸。

        现在我所有的文本视图和文本字段都可以工作了。

        【讨论】:

        • 我也有同样的问题,并试图像你一样解决它,但它不起作用..
        • 谢谢!!你救了我的周末:-)
        • 没有NIB怎么办?
        • 非常感谢您的信息。
        • 我在多个 UIAlerts 中遇到了类似的问题,最终当主视图返回焦点时,Windows 不是关键窗口。使用@BorutTomazin 的answer 我能够修复它。与其在搜索栏上做,不如在 UITextField 的 EditingDidBegin 期间做
        【解决方案5】:

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

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

        这个解决方案对我有用。

        【讨论】:

        • 我不完全确定为什么,但这对我有用。我有一个登录视图控制器,如果用户输入了错误的凭据,他们第二次回来重新输入他们的凭据时,文本字段将获得焦点,但您无法输入。将上述代码添加到我的 textFieldDidBeginEditing: 方法后,它开始工作!
        【解决方案6】:

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

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

        【讨论】:

        • 所以您的应用程序运行正常,与 MainWindow 或委托实现无关?当然,我的解决方案不适用于错误实施的 Revmob 广告。
        • @RyeMAC3 我写这个是因为我认为我的回答可以帮助其他人。顺便说一句,Revmob 目前无法修复此错误。这是解决方法:RevMobAds *revmob = [RevMobAds revMobAds]; RevMobBannerView *bannerView = [revmob bannerView]; [bannerView loadAd]; bannerView.frame = CGRectMake(0, 0, 320, 50); [view addSubview:bannerView];
        • 是的,我遇到了同样的问题。我什至没有注意到它,因为我什至没有将 Revmob 放在有问题的页面上。只是将它放在应用程序中就搞砸了。我在网上点击暂停,他们又开始工作了。我有另一个应用程序,他们阻止图像被交换。不知道他们在做什么,但我不会再将它们放入任何应用程序中。不同屏幕上的广告绝不会影响我的应用。
        【解决方案7】:

        我遇到了同样的问题,请确保应用委托具有 [self.window makeKeyAndVisible]。这为我解决了。

        【讨论】:

        • @AndrewCarter 我的 AppDelegate 中有 [self.window makeKeyAndVisible],但它不起作用。 ReyMAC3 的解决方案奏效了……所以它们不可能相同。
        • 谢谢!,为了更清楚,[window makeKeyAndVisible]应该放在didFinishLaunchingWithOptions中
        • 更新:它工作了几天,然后再次出现同样的问题:/
        猜你喜欢
        • 1970-01-01
        • 2021-09-16
        • 2014-12-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-24
        • 2015-04-07
        相关资源
        最近更新 更多