在didSelectRow转向另一个视图后,Popover不会解雇

时间:2013-01-09 12:11:50

标签: ios6 notifications popover uistoryboardsegue dismiss

我在Xcode 4.5中,有iOS6目标。 序言:我有一个libraryView(呈现视图控制器),带有一个包含搜索的popover。在显示搜索结果之后,点击一行会解散库并切换到entryView。一切正常。 我的问题:关闭entryView并返回到libraryView后,搜索弹出窗口仍然可见。 我尝试了许多不同的方法来解决这个问题: 我已经在segue中向搜索弹出窗口添加了一个Notification观察器,从搜索控制器发布了一个Notification,从entryView发布到libraryView中的以下方法。并且,是的,libraryView确实为此方法添加了addObserver:

- (void)searchComplete:(NSNotification *)notification
{
   NSLog(@"SearchPopover dismiss notification?");
   [_searchPopover dismissPopoverAnimated:YES];
}

我已加入测试...

if (_searchPopover.popoverVisible)
{
   [_searchPopover dismissPopoverAnimated:YES];
}

要查看库中的viewDidLoad,viewWillAppear,viewWillDisappear,awakeFromNib ... all。我有searchPopover作为财产,并尝试了它作为一个ivar。 我没有尝试过在segue之前或返回之后解雇popover。

有人有什么想法吗?帮助将不胜感激!!!

1 个答案:

答案 0 :(得分:2)

我找到了解决这个问题的方法......在这个答案中找到了它:iOS Dismissing a popover that is in a UINavigationController

但是,还有一个额外的步骤......纠正答案中的拼写错误并将“dismissPopover”方法更改为NSNotification方法。我为popover添加了一个segue,通常没有必要。关键是,将父级的popover定义设置为UIStoryboardPopoverSegue。

然后,使用通知让父母知道它应该解雇。

从父视图:

- (void)viewDidLoad
{
    ... other loading code...

    [NSNotificationCenter.defaultCenter addObserver:self selector:@selector(dismissSearch:) name:@"dismissSearch" object:nil];
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([segue.identifier isEqualToString:@"SearchSegue"])
    {
        [segue.destinationViewController setDelegate:self];
        _searchPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
    }
}

- (void)dismissSearch:(NSNotification *)notification
{
    NSLog(@"SearchPopover dismiss notification?");
    [_searchPopover dismissPopoverAnimated:YES];
}

在我的子视图(SearchView)中。理想情况下,它将位于didSelectRowAtIndexPath中。我发现它也在segue中工作,它将显示搜索项目,这是我通常放置addObserver的地方。在这种情况下,它是一个postNotification ......

    [NSNotificationCenter.defaultCenter postNotificationName:@"dismissSearch" object:nil];

最后一点:我正在使用一个IBAction来检查按钮时的弹出窗口可见性......显示或关闭。发现有这个以及其他方法导致弹出窗口在点击按钮后立即解散!评论if / else检查可见性解决了这个问题!

感谢rdelmar带领我走上这条道路!