我试图在窗口级别获取键盘框架的坐标以与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
有关如何获得正确键盘坐标的任何想法?
答案 0 :(得分:2)
您需要注册键盘通知,例如
[[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];