可能重复:
How can I detect if an external keyboard is present on an iPad?
当用户开始在我的iPhone应用程序的UI中编辑文本字段时,我想使用文本字段和键盘之间的空格来获取相关选项的列表。
使用iOS上的常规(屏幕上)键盘,有几个convenient notifications可以收听,这可以帮助我确定我在列表之间剩下多少空间。
但是,当您附加(或模拟使用)硬件键盘时,这些通知不再发布。不出意外,但这给我带来了一些挑战。如果用户使用硬件键盘,我有更多的空间用于列表。
但是,如果没有触发通知或委托方法来监听,我如何确定用户是否有硬件键盘?或者有吗?
还要考虑的是,用户可以先使用软件键盘使用该应用程序,然后连接他/她的硬件键盘并继续使用该应用程序。此时,软件键盘将隐藏,但用户仍在编辑文本字段。
我找到了这个问题的一个老骗子,但没有答案:
答案 0 :(得分:3)
如果连接了硬件键盘,则屏幕底部会显示输入附件视图(否则它们会附加到屏幕键盘的顶部)。
将输入视图的附件视图设置为大小为UIView
的空CGRectZero
。您将收到两种情况的显示/隐藏通知,并能够从metrics in the notification's userinfo dictionary确定可用的屏幕尺寸。
UIView *inputAccessoryView = [[[UIView alloc] initWithFrame:CGRectZero] autorelease];
inputAccessoryView.autoresizingMask = UIViewAutoresizingFlexibleWidth;
textView.inputAccessoryView = inputAccessoryView;
…
- (void)keyboardWillShow:(NSNotification*)aNotification {
NSLog(@"%@", [aNotification userInfo]);
}
记录的指标 - 请注意UIKeyboardFrameEndUserInfoKey
中的框架不在屏幕
// (NSDictionary *) {
// UIKeyboardAnimationCurveUserInfoKey = 0;
// UIKeyboardAnimationDurationUserInfoKey = "0.25";
// UIKeyboardBoundsUserInfoKey = "NSRect: {{0, 0}, {768, 264}}";
// UIKeyboardCenterBeginUserInfoKey = "NSPoint: {384, 891}";
// UIKeyboardCenterEndUserInfoKey = "NSPoint: {384, 1155}";
// UIKeyboardFrameBeginUserInfoKey = "NSRect: {{0, 758}, {768, 264}}";
// UIKeyboardFrameChangedByUserInteraction = 0;
// UIKeyboardFrameEndUserInfoKey = "NSRect: {{0, 1022}, {768, 264}}";
// }
更新 - 与相关问题中的user721239's answer非常相似。