1

我试图在窗口级别获取键盘框架的坐标,以便与 TableCell 进行比较,以对滚动进行微调,以便单元格中选定的 TextField 不会位于键盘或标题后面。

但是我在窗口级别获取键盘的 x,y 坐标时遇到问题,它们只是返回 0,0(原点),这是不正确的。或者,如果是,那不是我需要的。

我正在使用以下线路:

CGRect keyboardFrame = [self.view.window convertRect:_numericKeyboardView.frame toView:nil];
NSLog(@"Keyboard Frame: %f, %f, %f, %f", keyboardFrame.origin.x, keyboardFrame.origin.y, keyboardFrame.size.width, keyboardFrame.size.height);

产生输出(用于肖像):

Keyboard Frame: 0.000000, 0.000000, 768.000000, 264.000000

什么时候应该更像:

Keyboard Frame: 415.000000, 0.000000, 768.000000, 264.000000  

关于如何获得正确的键盘坐标的任何想法?

4

3 回答 3

2

来自http://developer.apple.com/library/ios/#documentation/StringsTextFonts/Conceptual/TextAndWebiPhoneOS/KeyboardManagement/KeyboardManagement.html

您需要注册键盘通知,例如

 [[NSNotificationCenter defaultCenter] addObserver:self
            selector:@selector(keyboardWasShown:)
            name:UIKeyboardDidShowNotification object:nil];

然后

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGRect kbFrame = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
}

并且不要忘记在您的dealloc方法中删除自我表单通知中心

于 2013-03-12T14:38:30.167 回答
1

如果你想这样做,你可能会发送convertRect:toView:到错误的接收者。做[_numericKeyboardView convertRect:_numericKeyboardView.bounds toView:nil];

于 2013-03-12T14:45:50.387 回答
0

你的问题具有误导性。听起来您的“键盘”是自定义视图,而不是系统键盘。问题应该是“在窗口坐标中获取视图的框架”。该convertRect:toView方法将起作用,但您将其倒退。

将您的代码更改为:

CGRect keyboardFrame = [_numericKeyboardView convertRect:_numericKeyboardView.bounds 
                                                  toView:self.view.window];
于 2013-03-12T14:48:24.273 回答