8

我在 iPad 中显示一个带有 UINavigation 栏的弹出框。在第二个视图中,我有一个可以显示键盘的 UISearchController。键盘将弹出框向上推,这很好,但是如果我现在按下 UINavigation 栏上的“后退”按钮,它会关闭键盘,这很好,但弹出框不会滑回原来的位置。有谁知道如何解决这个问题?谢谢!

4

3 回答 3

9

好的,所以我实际上弄清楚了(我相信)您的问题在问什么……以防万一有人从谷歌偶然发现这个问题,我想我会回答我是如何做到的。这感觉像是一项黑客工作,但我无法找到任何其他方法来做到这一点。

在调出键盘的控制器中,每当键盘关闭时,我都会让它发布通知:

    [aTextField resignFirstResponder];
[[NSNotificationCenter defaultCenter] postNotificationName:@"movePopups" object:nil];

然后回到我的主屏幕控制器,控制 UIPopover,我添加了一个监听器:

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(movePopUpToRightLocation)
                                             name:@"movePopups"
                                           object:nil];    

在初始化内部。请务必记住删除您的 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 种类型的弹出窗口/按钮会出现它,我可以轻松地做到这一点。但这是您可以使用的基本前提。

希望能帮助到你!

于 2010-09-15T21:24:52.927 回答
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];  
}   

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

于 2012-01-18T15:23:16.353 回答
0

按下后退按钮后,您应该手动调用resignFirstResponder搜索字段(例如内部viewDidDisappear)。

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

于 2012-04-04T12:06:36.733 回答