6

可能重复:
如何检测 iPad 上是否存在外接键盘?

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

使用来自 iOS 的常规(屏幕)键盘,有几个方便的通知可供收听,这有助于我确定我为中间的列表留下了多少空间。

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

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

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

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

4

1 回答 1

3

如果连接了硬件键盘(否则它们连接到屏幕键盘的顶部),则输入附件视图将显示在屏幕底部。

将输入视图的附件视图设置UIView为 size为空CGRectZero。您将收到两种情况的显示/隐藏通知,并能够从通知的用户信息字典中的指标确定可用的屏幕尺寸。

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在相关问题中的回答非常相似。

于 2012-11-07T18:18:17.377 回答