【发布时间】:2014-07-29 07:27:41
【问题描述】:
我想在 iOS 8 自定义键盘中添加类似于上面的单词选择视图。
- 如何动态更改键盘视图矩形大小?和
- 通知活动应用(如内置消息应用)相应地重新定位输入栏?
更新:基于this,键盘高度是可定制的。这怎么可能?
【问题讨论】:
标签: ios ios8 ios-app-extension
我想在 iOS 8 自定义键盘中添加类似于上面的单词选择视图。
更新:基于this,键盘高度是可定制的。这怎么可能?
【问题讨论】:
标签: ios ios8 ios-app-extension
您想根据输入更改输入附件视图的大小和内容。不是键盘的框架(输入视图)。您用红色矩形标记的区域是两种不同状态的输入附件视图。
UIKit 发布与键盘相关的通知。
UIKeyboardWillShowNotification, UIKeyboardDidShowNotification, UIKeyboardWillHideNotificationUIKeyboardDidHideNotification侦听这些通知的对象可以获取与输入视图相关的几何信息(例如键盘的高度)以调整已编辑的视图。
要根据输入更改输入附件视图,您必须首先观察其内容的变化。您可以通过实现UITextFieldDelegate 的textField:shouldChangeCharactersInRange:replacementString: 来做到这一点
方法或监听UITextFieldTextDidChangeNotification。
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(handleTextFieldDidChangeNotification:)
name:UITextFieldTextDidChangeNotification
object:_textFieldInInputAccessoryView];
关键是在文本字段发生变化时改变输入附件视图的内容和大小。 UIKit 将输入附件视图附加到输入视图(键盘)的顶部。如果您想在文本字段下方添加带有控件的额外行,您需要做的是更新输入附件视图的框架。
- (void)handleTextFieldDidChangeNotification:(NSNotification *)notification
{
// Update the contents/frame of the input accessory view.
// Reload the input views.
[_yourTextField reloadInputViews];
}
【讨论】:
在当前 iOS 8 中可以更改键盘的大小
逐字逐句摘自文档:“在 iOS 8.0 中,您可以在主视图最初在屏幕上绘制后随时调整自定义键盘的高度。”
要调整自定义键盘的大小,请添加一个简单的布局约束。
CGFloat _expandedHeight = 500;
NSLayoutConstraint *_heightConstraint =
[NSLayoutConstraint constraintWithItem: self.view
attribute: NSLayoutAttributeHeight
relatedBy: NSLayoutRelationEqual
toItem: nil
attribute: NSLayoutAttributeNotAnAttribute
multiplier: 0.0
constant: _expandedHeight];
[self.view addConstraint: _heightConstraint];
有关更多信息,请查看 Apple 的预发布文档 here!
【讨论】:
您不能使用 iOS 8 中的自定义键盘 API 将键盘扩展到其默认框架之外。我在今年的 WWDC 上向一位 Apple 工程师询问了这个问题。
【讨论】: