Сделайте ваш контроллер основного вида UISplitViewControllerDelegate
(если его еще нет) и подключите его к розетке UISplitViewController delegate
.
Создайте переменную UIPopoverController
в контроллере основного вида:
// MyViewController.h
@interface MyViewController : UIViewController <UISplitViewControllerDelegate> {
UIPopoverController *popoverController;
}
@property (retain, nonatomic) UIPopoverController *popoverController;
// MyViewController.m
@synthesize popoverController;
Реализуйте следующие методы UISplitViewControllerDelegate:
// Called when rotating to portrait
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc {
// Popover controller is visible in portrait
self.popoverController = pc;
}
// Called when rotating to landscape
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem {
// No popover controller in landscape view
self.popoverController = nil;
}
В вашем собственном обработчике в главном контроллере вида (тот, который вызывается при выборе элемента навигации в табличном представлении):
- (void)navigationControllerSelectedItem:(id)item {
// If a popover controller is visible, hide it
if (popoverController) {
[popoverController dismissPopoverAnimated:YES];
}
}
И не забудьте освободить эту переменную:
- (void)dealloc {
self.popoverController = nil;
[super dealloc];
}
Надеюсь, это поможет!