HIG от Apple говорит, что во всплывающем окне не должно быть явной кнопки закрытия, но чтобы сделать то, что вы просите, у вас есть два варианта.
1) опубликовать NSNotification
OR
2) углубляйтесь в иерархию представлений, пока у вас не появится экземпляр всплывающего окна
1) в зависимости от того, в каком представлении вы представляете всплывающее окно, в методе viewDidLoad:
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(dismissThePopover) name:@"popoverShouldDismiss" object:nil];
создайте метод с именем dismissThePopover и в методе Dealloc удалите Observer
-(void)dismissThePopover {
[self.popoverController dismissPopoverAnimated:YES];
}
-(void)dealloc {
[[NSNotificationCenter defaultCenter] removeObserver:self];
}
В кнопке «отклонить» popoverController введите следующую строку:
[[NSNotificationCenter defaultCenter] postNotificationName:@"popoverShouldDismiss" object:nil];
Это отправляет уведомление в приложение, и, поскольку вы зарегистрировали свой другой контроллер представления для его прослушивания, всякий раз, когда он видит это уведомление, он вызывает указанный вами селектор, в данном случае, rejectThePopover.
2) углубитесь в иерархию представлений, чтобы найти self.popoverController
проверьте это, у вас, конечно, будет по-другому, но общая идея та же. Начните с вашего AppDelegate, перейдите в первый контроллер представления, перейдите в подпредставления, пока не дойдете до своего объекта 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!
Надеюсь это поможет
person
Justin
schedule
22.04.2010