在窗口级别获取键盘的框架

时间:2013-03-12 14:34:57

标签: iphone ios objective-c xcode ipad

我试图在窗口级别获取键盘框架的坐标以与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  

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

3 个答案:

答案 0 :(得分: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方法

中删除自我表单通知中心

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

将您的代码更改为:

CGRect keyboardFrame = [_numericKeyboardView convertRect:_numericKeyboardView.bounds 
                                                  toView:self.view.window];