Iphone 在窗口级别获取键盘框架
我试图在窗口级别获得键盘框架的坐标,与TableCell进行比较,以便在滚动时进行微调,使单元格中选定的文本字段不会位于键盘或标题后面 然而,我在获取窗口级别键盘的x,y坐标时遇到了问题,它们只是返回0,0(原点),这是不正确的。如果是的话,这不是我需要的 我用的是:Iphone 在窗口级别获取键盘框架,iphone,ios,objective-c,xcode,ipad,Iphone,Ios,Objective C,Xcode,Ipad,我试图在窗口级别获得键盘框架的坐标,与TableCell进行比较,以便在滚动时进行微调,使单元格中选定的文本字段不会位于键盘或标题后面 然而,我在获取窗口级别键盘的x,y坐标时遇到了问题,它们只是返回0,0(原点),这是不正确的。如果是的话,这不是我需要的 我用的是: CGRect keyboardFrame = [self.view.window convertRect:_numericKeyboardView.frame toView:nil]; NSLog(@"Keyboard Frame
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: 415.000000, 0.000000, 768.000000, 264.000000
关于如何获得正确的键盘坐标有什么想法吗 来自
您需要注册键盘通知,如
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(keyboardWasShown:)
name:UIKeyboardDidShowNotification object:nil];
然后
并且不要忘记在您的
dealloc
方法中删除self form notification center如果您想这样做,您可能将convertRect:toView:
发送给了错误的接收者。Do[\u numericKeyboardView convertRect:\u numericKeyboardView.bounds to view:nil]代码>你的问题有误导性。听起来您的“键盘”是一个自定义视图,而不是系统键盘。问题应该是“获取窗口坐标中的视图框架”。convertRect:toView
方法将起作用,但您可以将其反向使用
将代码更改为:
CGRect keyboardFrame = [_numericKeyboardView convertRect:_numericKeyboardView.bounds
toView:self.view.window];
当键盘一分为二时会怎样?那就有两帧了。我不明白你说的一分为二是什么意思?我真的只需要键盘相对于iphone/ipad屏幕的X坐标。在ipad上的iOS 5+下,你可以将键盘“向上”移动,然后它分成两部分:这是一个没有该功能的自定义键盘。啊,对不起,我没有注意到。我已经收到了键盘显示的通知。我正在尝试在文本字段内检查,但我正在编辑我的检查。您的解决方案在纵向模式下返回的似乎是键盘,即使您处于横向模式,这显然会导致值不正确。你知道有什么解决办法吗?我也有同样的问题。我认为这是一个错误。我在我的方法中检查了界面方向,如果是横向的,则检查了倒置的宽度和高度。我在回答中没有提到这一点,因为我希望它已经被修复:)如果你还想知道,我发现了为什么这些值是颠倒的。这是因为旋转设备时原点不在屏幕的左上角。0,0原点随其所附着的角移动(正常纵向中的左上角,而不是倒置),因此当您转动设备时,该角也会转动。抛出所有值这是不正确的-rect应该是_numericKeyboardView.bounds。视图的框架在其superview的坐标系中指定。Per UIView docs:rect参数是“在接收器的本地坐标系(边界)中指定的矩形”:此行返回结果键盘帧:0.000000、416.000000、1024.000000、352.000000,这似乎是正确的。我会进一步测试,但我相信就是这样。
- (void)keyboardWasShown:(NSNotification*)aNotification
{
NSDictionary* info = [aNotification userInfo];
CGRect kbFrame = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue];
}
CGRect keyboardFrame = [_numericKeyboardView convertRect:_numericKeyboardView.bounds
toView:self.view.window];