我如何知道是否有硬件键盘?

时间:2012-04-04 14:41:54

标签: objective-c ios cocoa-touch keyboard

  

可能重复:
  How can I detect if an external keyboard is present on an iPad?

当用户开始在我的iPhone应用程序的UI中编辑文本字段时,我想使用文本字段和键盘之间的空格来获取相关选项的列表。

使用iOS上的常规(屏幕上)键盘,有几个convenient notifications可以收听,这可以帮助我确定我在列表之间剩下多少空间。

但是,当您附加(或模拟使用)硬件键盘时,这些通知不再发布。不出意外,但这给我带来了一些挑战。如果用户使用硬件键盘,我有更多的空间用于列表。

但是,如果没有触发通知或委托方法来监听,我如何确定用户是否有硬件键盘?或者有吗?

还要考虑的是,用户可以先使用软件键盘使用该应用程序,然后连接他/她的硬件键盘并继续使用该应用程序。此时,软件键盘将隐藏,但用户仍在编辑文本字段。

我找到了这个问题的一个老骗子,但没有答案:

1 个答案:

答案 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非常相似。