Ipad UIPOP键盘向下滑动后,超控器未移动到原始位置

Ipad UIPOP键盘向下滑动后,超控器未移动到原始位置,ipad,uipopovercontroller,Ipad,Uipopovercontroller,我在iPad上展示一个带有导航条的popover。在第二个视图中,我有一个可以显示键盘的UISearchController。键盘向上推动popover,这很好,但是如果我现在按下导航栏上的“后退”按钮,它会取消键盘,这很好,但popover不会滑回其原始位置。有人知道怎么解决吗?谢谢 好吧,所以我确实明白了(我相信)你的问题是什么……为了防止有人在谷歌上偶然发现这个问题,我想我会回答我是如何做到的。这感觉像是一个黑客的工作,但我还没有找到任何其他方式来做它 在打开键盘的控制器中,我让它在键盘关

我在iPad上展示一个带有导航条的popover。在第二个视图中,我有一个可以显示键盘的UISearchController。键盘向上推动popover,这很好,但是如果我现在按下导航栏上的“后退”按钮,它会取消键盘,这很好,但popover不会滑回其原始位置。有人知道怎么解决吗?谢谢

好吧,所以我确实明白了(我相信)你的问题是什么……为了防止有人在谷歌上偶然发现这个问题,我想我会回答我是如何做到的。这感觉像是一个黑客的工作,但我还没有找到任何其他方式来做它

在打开键盘的控制器中,我让它在键盘关闭时发布通知:

    [aTextField resignFirstResponder];
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil];
然后回到我的主屏幕控制器上,它控制UIPopover,我添加了一个侦听器:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movePopUpToRightLocation)
                                             name:@"movePopups"
                                           object:nil];    
在init内部。请务必记住删除dealloc中的侦听器,以获得良好的编程实践:

[[NSNotificationCenter defaultCenter] removeObserver:self];
因此,每当我收到键盘消失的通知时,我都会得到弹出框显示按钮的引用,并直接从中重新显示:

-(void)movePopUpToRightLocation {
NSLog(@"move pop up to right location");
if (morePopUp) {
    UIBarButtonItem *barButtonItem = (UIBarButtonItem *)[[bottomToolBar items] objectAtIndex:0];
    [morePopUp presentPopoverFromBarButtonItem:barButtonItem
                      permittedArrowDirections:UIPopoverArrowDirectionDown
                                      animated:YES];            
}   
}

我没有添加任何弹出窗口的检查,但是如果我有超过1种类型的弹出窗口/按钮,我可以很容易地做到这一点。但这是你可以做的基本前提


希望有帮助

您还可以在初始值设定项中的某个位置注册UIKeyboardDidHideNotification

[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(movePopoverBack:) name:UIKeyboardDidHideNotification object:nil];
此代码将弹出框向后移动:

- (void)movePopoverBack:(id)sender {
    if ([self.settingsPopoverController isPopoverVisible]) {
        [self performSelector:@selector(hidePopover) withObject:nil afterDelay:0.1];
        [self performSelector:@selector(movePopoverBack) withObject:nil afterDelay:0.5];
    }
}

- (void)hidePopover {
    [self.settingsPopoverController dismissPopoverAnimated:YES];
}

- (void)movePopoverBack {
    [self.settingsPopoverController
     presentPopoverFromBarButtonItem:self.bottomToolbar.settingsButton
     permittedArrowDirections:UIPopoverArrowDirectionDown
     animated:YES];  
}   

我没有让它工作没有延误,但这似乎是我目前的项目可以接受的。希望它对某人有所帮助。

按下后退按钮后,您应该手动调用
resignFirstResponder
以查看搜索字段(例如在
视图中)


这应该会有所帮助,但在iOS 4下,当设备处于横向时,如果ome按钮位于左侧,问题仍然会重现

谢谢!我相信这对某人是有帮助的。