Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios6 didSelectRow切换到另一个视图后Popover未解除_Ios6_Notifications_Popover_Uistoryboardsegue_Dismiss - Fatal编程技术网

Ios6 didSelectRow切换到另一个视图后Popover未解除

Ios6 didSelectRow切换到另一个视图后Popover未解除,ios6,notifications,popover,uistoryboardsegue,dismiss,Ios6,Notifications,Popover,Uistoryboardsegue,Dismiss,我使用的是Xcode 4.5,目标是iOS6。 前言:我有一个libraryView(显示视图控制器),带有一个包含搜索的popover。显示搜索结果后,点击一行将关闭库并转到entryView。这一切都很好。 我的问题:在关闭entryView并返回libraryView时,搜索弹出框仍然可见。 我尝试了许多不同的方法来解决这个问题: 我在segue中添加了一个通知观察者到搜索popover,发布了来自搜索控制器的通知,从entryView发布到libraryView中的以下方法。是的,lib

我使用的是Xcode 4.5,目标是iOS6。 前言:我有一个libraryView(显示视图控制器),带有一个包含搜索的popover。显示搜索结果后,点击一行将关闭库并转到entryView。这一切都很好。 我的问题:在关闭entryView并返回libraryView时,搜索弹出框仍然可见。 我尝试了许多不同的方法来解决这个问题: 我在segue中添加了一个通知观察者到搜索popover,发布了来自搜索控制器的通知,从entryView发布到libraryView中的以下方法。是的,libraryView确实具有此方法的addObserver:

- (void)searchComplete:(NSNotification *)notification
{
   NSLog(@"SearchPopover dismiss notification?");
   [_searchPopover dismissPopoverAnimated:YES];
}
我在测试中添加了

if (_searchPopover.popoverVisible)
{
   [_searchPopover dismissPopoverAnimated:YES];
}
要查看DIDLOAD、VIEW将出现、VIEW将消失、从NIB唤醒。。。都在图书馆里。我将searchPopover作为一个属性,并尝试将其作为ivar。 我试过的任何东西都不会在赛格开始前或回来后丢弃这件府绸


有人有什么想法吗?非常感谢您的帮助

我找到了解决这个问题的方法。。。在以下答案中找到它:

但是,还有一小步要做。。。更正答案中的键入错误,并将“dismissPopover”方法更改为NSNotification方法。我为popover添加了一个segue,这通常是不必要的。不过,关键是将父级的popover定义设置为UIStoryBoardPopoOverSegue

然后,使用通知让家长知道它应该解除

从父视图:

- (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中。我发现它也可以在视图中显示搜索的项目,这是我通常放置addObserver的地方。在这种情况下,它是一个后通知

    [NSNotificationCenter.defaultCenter postNotificationName:@"dismissSearch" object:nil];
最后一点注意:我正在使用一个iAction,在点击按钮时检查popover的可见性。。。显示或取消。发现使用此方法以及其他方法会导致popover在点击按钮时立即关闭!注释掉if/else检查的可见性解决了这个问题

感谢rdelmar带领我走上这条路