iOS的键盘位置和方向(iOS Keyboard Location and Orientation)

2019-06-25 08:51发布

我是比较新的iOS SDK和我遇到有关设备的键盘位置和方向为应用我工作的一个很奇怪的问题。 问题是,如果键盘是开放的,而用户多任务或应用进入后台,用户回来的应用程序后,键盘将被移动(与UIKeyboardWillChangeFrameNotification被提出),但在不正确的方向和地点。

有时,键盘完全显示出来了屏幕过,这是完全意外的行为。

我的问题是:

  1. 什么是键盘的位置和方向依赖? 它是如何通过iOS的控制?

  2. 有没有办法当显示屏幕外,无论设备类型和屏幕尺寸的键盘来检测? 我想这将是通过跟踪可行UIKeyboardWillChangeFrameNotificationUIKeyboardWillShowNotification

  3. 我将如何重置/设置之前,显示它的键盘的位置和方向是什么? 这甚至可能吗?

Answer 1:

1.)键盘是一个的UIWindow,位置是依赖于应用程序的主窗口。

2.)你可以做的是,在该通知的一个UIKeyboardWillShowNotificationUIKeyboardWillChangeFrameNotification方法烧制,环透过窗户子视图,找到键盘。 在我的应用程序之一,我需要一个子视图添加到键盘。 对于你的情况,你可以这样做,得到的框架:

//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)不能完全肯定这是可能的,但所提供的代码,我给你。 keyboard现在浇铸为“的UIView”,你可以使用自己的变换来。

这可能不是most完美的解决方案,但它很适合我的情况。

希望这可以帮助 !



Answer 2:

从文档:

可以使用“键盘通知用户信息键”来描述获得键盘从用户信息词典的位置和大小的关键。

用来从键盘通知的用户信息的字典值的键:

NSString * const UIKeyboardFrameBeginUserInfoKey;
NSString * const UIKeyboardFrameEndUserInfoKey;
NSString * const UIKeyboardAnimationDurationUserInfoKey;
NSString * const UIKeyboardAnimationCurveUserInfoKey;


文章来源: iOS Keyboard Location and Orientation