Apple, HIG говорит, что не должно быть явной кнопки отклонения внутри поповера, но чтобы сделать то, что вы просите, у вас есть два варианта.
1) опубликовать NSNotification
OR
2) углубиться в иерархию представлений, пока у вас не появится экземпляр popover
1) в любом представлении, в котором вы представляете всплывающее окно, в методе viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissThePopover) name:@"popoverShouldDismiss" object:nil];
создайте метод с именем dismissThePopover, а в методе dealloc - removeObserver
-(void)dismissThePopover {
[self.popoverController dismissPopoverAnimated:YES];
}
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
Введите в вашей строке popoverController кнопку «dismiss»:
[[NSNotificationCenter defaultCenter] postNotificationName:@"popoverShouldDismiss" object:nil];
После этого отправляется уведомление приложению, и поскольку вы зарегистрировали другой контроллер представления для его прослушивания, всякий раз, когда он видит это уведомление, он вызывает указанный вами селектор, в данном случае dismissThePopover.
2) углубиться в иерархию представлений, чтобы найти self.popoverController
зацените, у вас все будет иначе, конечно, но общая идея та же. Начните с вашего AppDelegate, перейдите к первому viewcontroller, перейдите к подпредставлениям, пока не доберетесь до своего объекта self.popoverController.
MyAppDelegate *appDelegate = [[UIApplication sharedApplication]delegate];
//appDelegate instance, in this case it's the .m file for your ApplicationDelegate
UISplitViewController *svc = appDelegate.splitViewController;
//In this case the first view inside the appDelegate is a SplitView, svc
UINavigationController *navc = [[svc viewControllers]objectAtIndex:0];
//a navigationController is at index:0 in the SplitView hierarchy. DetailView is at index:1
NSArray *vcs = [navc viewControllers];
//vcs is the array of different viewcontrollers inside the Navigation stack for nvc
iPadRootViewController *rootView = [vcs objectAtIndex:0];
//declare the rootView, which is the .m file that is at index:0 of the view array
UIPopoverController *pc = [rootView popoverController];
//HERE WE GO!!! popoverController is a property of iPadRootViewController's instance rootView, hereby referred to as pc.
[pc dismissPopoverAnimated:YES];
//bye bye, popoverController!
Надеюсь, это поможет