UIView inputView vs inputViewController

时间:2015-01-08 02:37:40

标签: ios ios7 ios8 autolayout custom-keyboard

在iOS7或更早版本中,我只需设置inputView的{​​{1}}属性即可在我的应用中实现自定义键盘。当设备旋转时,我只需将UIView框架的高度重置为横向或纵向键盘的高度,键盘高度就会正确更新。

在iOS8中,所有这一切都被打破了。对inputView框架的更改将被忽略。我已经尝试调整inputView的自动调整掩码和自动布局限制,但这些也会以其他方式失败。

现在是否需要继承inputViewUIInputViewController以实现自定义键盘(即使它不是系统范围的键盘)?我无法在Apple的文档中找到支持此功能的任何内容,但似乎可能是这种情况。

2 个答案:

答案 0 :(得分:1)

  

现在是否需要继承UIInputViewController和UIInputView以实现自定义键盘(即使它不是系统范围的键盘)?

我不知道是否需要它,但如果你想在你的应用程序中创建一个自定义键盘,肯定建议继承UIInputViewController。事实上,如果您计划进行键盘扩展,Apple建议将此作为第一步:首先将其作为内部键盘进行测试并以该形式进行测试,然后根据需要将其迁移到键盘扩展中。

在这种情况下你做子类UIInputView;您使用输入视图控制器提供的输入视图。

这完全解决了您遇到的问题,因为视图控制器是一个视图控制器,并获取与旋转和布局相关的标准视图控制器事件。此外,可以使用自动布局约束在内部布置输入视图,以便在调整键盘大小时使布局保持一致。

答案 1 :(得分:0)

键盘高度问题是iOS8错误,子类化UIInputViewController不会修复它。 UIInputViewController的目的仅仅是用于制作系统范围的键盘,并且正如Apple声明here,如果您只为自己的应用程序执行自定义键盘,则不应使用它。

  

确保自定义系统范围的键盘确实是您想要的   开发。为您的应用或提供全自定义键盘   在您的应用程序中使用自定义键补充系统键盘   iOS SDK提供了其他更好的选择。了解自定义输入视图   并在文本中的数据输入的自定义视图中输入附件视图   iOS编程指南。

最终,我被迫开发自己的iOS8解决方案,放弃iOS系统键盘并构建一个模仿系统键盘的结构,创建我自己的键盘视图结构,动画进/出,编写自定义代码以响应系统事件通常会解除键盘等问题。这是苹果公司允许进入iOS8的一个非常可怕和昂贵的错误,特别是当自定义键盘被认为是iOS8中最棒的新事物之一时。