【问题标题】:Prevent custom keyboard in textfield防止文本字段中的自定义键盘
【发布时间】:2014-11-19 04:28:03
【问题描述】:

我正在试验自定义键盘如何影响我的应用。我在 iPhone 6 上安装了 Swype。

我发现在我的某些视图中,我在文本字段上设置了自定义 inputView 属性,Swype 键盘覆盖并呈现而不是我的选择器。这完全破坏了我的 UI,不能允许。

有没有办法明确告诉 iOS 8 只使用我设置的 inputView?

也许这是一个错误?允许第三方覆盖我的输入规范根本不是预期的行为?

【问题讨论】:

  • 我的应用程序遇到了确切的问题。我尝试了多个自定义键盘,但问题到处都是。你有什么成功吗?

标签: iphone ios8 inputview ios-keyboard-extension ios8-extension


【解决方案1】:

您可以使用以下代码为您的应用禁用自定义键盘:

将此包含在您的应用委托中:

- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier {
    if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) {
        return NO;
    }
    return YES;
}

【讨论】:

  • 谢谢。很高兴知道这可能是一个解决方案。不过手感有点重。用户可能会因为在我的应用程序中找不到他们喜欢的键盘而感到沮丧。在许多情况下没有理由不能使用自定义键盘,只有在我提供了专用 inputView 的情况下才会出现问题。
  • 我自己偶然发现了这个问题,这是快速修复。我的主要问题是登录视图,其中不允许自定义键盘设置密码,因此当用户从用户名字段中点击“下一步”时,密码文本字段永远不会显示键盘。 (因此,如果您也有登录名或安全文本输入文本字段,请使用 swype 对其进行测试,看看是否也不会破坏您的 UI)
  • @eertl:我还有一个问题。我知道我们将能够使用上面的代码 sn-p 禁用自定义 iOS 8 键盘。这里重要的一点是我们需要使用Xcode-6/iOS 8 SDK来使用上面的。由于其他一些限制,我仍在使用 Xcode 5。有什么办法可以防止使用 iOS 7 SDK/Xcode 5 的第三方键盘?请帮忙。
  • 1) 上面的答案是你第一次问@DeanDavids,你可以接受:) 2) 如果你使用Xcode 5和SDK7,第三方键盘将无法使用
  • @TonyMkenu 我更希望防止覆盖 inputView,或者更具体地说,防止单个文本字段的自定义选择器。这实际上似乎已在已发布的 iOS8 版本中得到修复,因此不再是问题。对于完全禁用用户选择的副作用,我会接受答案,我认为这是不可接受的。
【解决方案2】:

斯威夫特 4

  func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
        if (extensionPointIdentifier == .keyboard) {
            return false
        }
        return true
    }

【讨论】:

    【解决方案3】:

    以 Pablo Ezequiel Romero 的回答为起点,我能够让事情为我工作。本质上,与其为自定义键盘使用UIViewController,不如使用UIInputViewController 并将您的控件放在UIInputViewControllerinputView 中。然后,将UITextFieldUITextViewinputView 分配给UIInputViewControllerinputView

    如果您使用自动布局,则需要确保正确设置所有内容并确保在 inputView 上设置初始高度约束并将其优先级设置为低于最大 999 级别(我使用的是 800)。任何高度都可以;系统将用它自己的一个约束替换您的约束。较低的优先级避免了自动布局冲突。 (对我来说,如果我不包含这个约束,最终的视图根本不会有任何高度。)

    当我完成所有这些操作时,我能够切换进出我的(应用内部的)自定义键盘和任何第三方键盘扩展。

    【讨论】:

      【解决方案4】:

      我遇到了类似的问题,我可以使用 UIInputViewController 修复它。基本上我在 inputView 中设置的视图是我的 UIInputViewController 子类的视图。我使用的是 UIViewController,但在更换基本视图控制器后,它开始运行良好。

      【讨论】:

      • Pablo,我从来没有完全解决过这个问题。可以清楚一点。我不明白,确切地说,你做了什么。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-11
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2012-03-16
      相关资源
      最近更新 更多