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