繁体   English   中英

防止文本字段中的自定义键盘

[英]Prevent custom keyboard in textfield

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

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

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

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

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

在您的app委托中包含此内容:

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

使用Pablo Ezequiel Romero的答案作为起点,我能够让事情适合我。 本质上,不是使用UIViewController作为自定义键盘,而是使用UIInputViewController并将控件放在UIInputViewControllerinputView 然后,分配inputView您的UITextFieldUITextViewinputView中的UIInputViewController

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

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

我有一个类似的问题,我能够使用UIInputViewController修复它。 基本上我在inputView中设置的视图是我的UIInputViewController子类的视图。 我正在使用UIViewController,但在更换基本视图控制器后,它开始运行良好。

斯威夫特4

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

要阻止用户对各个字段使用自定义键盘扩展,您可以使用SecureTextEntry中的 SecureTextEntry(SwiftUI 中的SecureField )。 尽管这些对象会自动屏蔽用户输入而无需更改它(这使得它们易于用于密码,但不适用于所有类型的机密)。

例如,SwiftUI 声明如下所示:

var passw: String = ""
(...)
SecureField("Password", text: $passw)

第一个参数是用户将看到的提示。

请注意, SecureField不仅会在其字段上自动阻止键盘扩展,还会在同一应用程序屏幕上的其他字段上自动阻止键盘扩展(也适用于TextField )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM