我在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。
有人有什么想法吗?帮助将不胜感激!!!
答案 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带领我走上这条道路!