我正在试验自定义键盘如何影响我的应用程序。我在 iPhone 6 上安装了 Swype。
我发现在我的某些视图中,我在文本字段上设置了自定义 inputView 属性,Swype 键盘覆盖并呈现而不是我的选择器。这完全破坏了我的 UI 并且不能被允许。
有没有办法明确告诉 iOS 8 只使用我设置的 inputView?
这是一个错误,也许?允许第三方覆盖我的输入规范完全不是预期的行为吗?
我正在试验自定义键盘如何影响我的应用程序。我在 iPhone 6 上安装了 Swype。
我发现在我的某些视图中,我在文本字段上设置了自定义 inputView 属性,Swype 键盘覆盖并呈现而不是我的选择器。这完全破坏了我的 UI 并且不能被允许。
有没有办法明确告诉 iOS 8 只使用我设置的 inputView?
这是一个错误,也许?允许第三方覆盖我的输入规范完全不是预期的行为吗?
您可以使用以下代码为您的应用禁用自定义键盘:
将其包含在您的应用委托中:
- (BOOL)application:(UIApplication *)application shouldAllowExtensionPointIdentifier:(NSString *)extensionPointIdentifier {
if ([extensionPointIdentifier isEqualToString: UIApplicationKeyboardExtensionPointIdentifier]) {
return NO;
}
return YES;
}
斯威夫特 4
func application(_ application: UIApplication, shouldAllowExtensionPointIdentifier extensionPointIdentifier: UIApplicationExtensionPointIdentifier) -> Bool {
if (extensionPointIdentifier == .keyboard) {
return false
}
return true
}
使用 Pablo Ezequiel Romero 的答案作为起点,我能够让事情为我工作。本质上,与其使用 aUIViewController
作为自定义键盘,不如使用 aUIInputViewController
并将您的控件放在UIInputViewController
'sinputView
中。然后,将 的inputView
或UITextField
分配UITextView
给inputView
的UIInputViewController
。
如果您使用自动布局,则需要确保正确设置所有内容并确保在 inputView 上设置初始高度约束并将其优先级设置为低于最大 999 级别(我使用的是 800)。任何高度都可以;系统将用它自己的一个约束替换您的约束。较低的优先级避免了自动布局冲突。(对我来说,如果我不包括这个约束,最终的视图根本不会有任何高度。)
当我完成所有这些操作时,我能够切换进出我的(应用程序内部的)自定义键盘和任何第三方键盘扩展。
我有一个类似的问题,我能够使用 UIInputViewController 修复它。基本上我在 inputView 中设置的视图是我的 UIInputViewController 子类的视图。我正在使用 UIViewController,但在更换基本视图控制器后,它开始运行良好。