旋转时键盘消失

4
我正在开发一款iPad应用程序。在其中一个视图中,我有一个子视图,该子视图会在按钮点击事件中出现和消失。该子视图包含一个UITextView。默认情况下,我使其成为第一个响应者,以便键盘在视图出现时立即出现。当UIKeyboardWillHideNotification被触发时,即键盘隐藏时,子视图也会消失。
现在的问题是,当应用程序旋转时,系统会触发UIKeyboardWillHideNotification,从而使子视图消失。我希望键盘保持在屏幕上。
发生了什么事,我该如何解决它?
注意:视图和子视图都有单独的视图控制器。UIKeyboardWillHideNotification在子视图的视图控制器类中接收。
2个回答

4

您可以在shouldAutoRotate方法中声明一个BOOL变量,并在调用时设置它,然后在显示和隐藏子视图的选择器方法中,您可以使用简单的if条件来判断视图是否旋转。

像这样:

if(viewRotated)
{
    subView.hidden = YES;
}
viewRotated = NO;

编辑部分:
我不确定这段代码在做什么,但它在我朋友编写iPad代码的一个应用程序中完美运行。

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    if(UIInterfaceOrientationIsPortrait(interfaceOrientation))
    {
        [[NSNotificationCenter defaultCenter] addObserver:self
                                                 selector:@selector(keyboardWillShow:) 
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
        [[NSNotificationCenter defaultCenter] addObserver:self 
                                                 selector:@selector(keyboardWillHide:)
                                                     name:UIKeyboardWillShowNotification
                                                   object:nil];
    }
    else
    {

        [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                        name:UIKeyboardWillShowNotification 
                                                      object:nil];
        [[NSNotificationCenter defaultCenter] removeObserver:self 
                                                        name:UIKeyboardWillShowNotification 
                                                      object:nil];
    }
    return YES;
}

如果您的UIKeyboardWillHideNotification未被触发,您可以通过在此方法中再次添加这些通知来重新添加通知。

- (void)didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation

我错过了一个小细节...我的视图和子视图都有单独的视图控制器。UIKeyboardWillHideNotification在子视图的视图控制器类中接收。而且子视图没有接收到旋转通知。UIKeyboardWillHideNotification在任何其他事情发生之前就被接收到了,这对我来说似乎不正常。旋转不应该触发UIKeyboardWillHideNotification。或者真的会吗? - Mustafa

1
你可以使用一个BOOL变量来记录是否正在旋转。当它正在旋转时,你可以什么也不做。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接