iphone – iOS键盘位置和方向

我对iOS SDK比较陌生,而且我正在遇到一个关于我正在处理的应用程序的设备键盘位置和方向的一个非常奇怪的问题.问题是如果键盘在用户多任务或应用程序进入后台时打开,在用户返回应用程序后,键盘将被移位(UIKeyboardWillChangeFrameNotification被提升),但方向不正确位置.

有时键盘也会完全脱离屏幕,这是完全不受欢迎的行为.

我的问题是:

>键盘的位置和方向取决于什么?它是如何由iOS控制的?
>有没有办法检测键盘何时在屏幕外显示,无论设备类型和屏幕尺寸如何?我认为通过跟踪UIKeyboardWillChangeFrameNotification或UIKeyboardWillShowNotification可行.
>在显示键盘之前,如何重置/设置键盘的位置和方向?这有可能吗?

最佳答案
1.)键盘是UIWindow,位置取决于应用程序的主窗口.

2.)你可以做的是,在通知UIKeyboardWillShowNotification或UIKeyboardWillChangeFrameNotification方法触发之一时,循环浏览windows子视图以找到键盘.在我的一个应用程序中,我需要在键盘上添加子视图.对于您的情况,您可以通过执行以下操作来获取框架:

//The UIWindow that contains the keyboard view - It some situations it will be better to actually
//iterate through each window to figure out where the keyboard is, but In my applications case
//I know that the second window has the keyboard so I just reference it directly
UIWindow* tempWindow = [[[UIApplication sharedApplication] windows] objectAtIndex:1];

//Because we cant get access to the UIPeripheral throught the SDK we will just use UIView.
//UIPeripheral is a subclass of UIView anyways
UIView* keyboard;

    //Iterate though each view inside of the selected Window
for(int i = 0; i < [tempWindow.subviews count]; i++)
{
    //Get a reference of the current view
    keyboard = [tempWindow.subviews objectAtIndex:i];

           //Assuming this is for 4.0+, In 3.0 you would use "<UIKeyboard"
           if([[keyboard description] hasPrefix:@"<UIPeripheral"] == YES) {

                  //Keyboard is now a UIView reference to the UIPeripheral we want
                  NSLog(@"Keyboard Frame: %@",NSStringFromCGRect(keyboard.frame));

           }
}

3.)不完全确定这是可能的,但我提供的代码提供给你.键盘现在已转换为’UIView’,您可以将自己的变换应用到.

这可能不是最优雅的解决方案,但它适用于我的情况.

希望这可以帮助 !

转载注明原文:iphone – iOS键盘位置和方向 - 代码日志