Dismiss Popover When Row Selected?
When selecting a row from the master view of UISPlitVi开发者_如何转开发ewControler when its in popover mode. Isn't it supposed to dismiss automatically? How can I fix it there?
Usually I would do [self.popoverController dismissPopoverAnimated:YES];
but popoverController
isn't recognized in this case.
I thought that UISplitViewController
is supposed to do this automatically?
Here is my UISplitViewDelegate code that is in my detailViewCOntroller:
- (void)splitViewController:(UISplitViewController *)svc willHideViewController:(UIViewController *)aViewController withBarButtonItem:(UIBarButtonItem *)barButtonItem forPopoverController: (UIPopoverController *)pc
{
barButtonItem.title = @"Medical Codes";
NSMutableArray *items = [[self.toolbar items] mutableCopy];
[items insertObject:barButtonItem atIndex:0];
[self.toolbar setItems:items animated:YES];
[items release];
}
// Called when the view is shown again in the split view, invalidating the button and popover controller.
- (void)splitViewController:(UISplitViewController *)svc willShowViewController:(UIViewController *)aViewController invalidatingBarButtonItem:(UIBarButtonItem *)barButtonItem
{
NSMutableArray *items = [[self.toolbar items] mutableCopy];
[items removeObjectAtIndex:0];
[self.toolbar setItems:items animated:YES];
[items release];
}
In my app delegate I have:
@property (nonatomic, retain) IBOutlet UISplitViewController *splitViewController;
@property (nonatomic, retain) IBOutlet DetailViewControlleriPad *rightViewController;
@property (nonatomic, retain) IBOutlet RootViewController * leftViewController;
And these properties are hooked up in IB. RootViewController pushes to other tableviews, which need to be dismissed when they are selected while in popover mode.
edit
- (void)setDetailItem:(id)newDetailItem
{
if (detailItem != newDetailItem)
{
[detailItem release];
detailItem = [newDetailItem retain];
[self.myTableView reloadData];
}
}
I've always had to explicitly dismiss the popover manually. To do this, grab a reference to the popover view controller when it is passed to my UISplitViewControllerDelegate:
- (void)splitViewController:(UISplitViewController*)svc
willHideViewController:(UIViewController *)aViewController
withBarButtonItem:(UIBarButtonItem*)barButtonItem
forPopoverController:(UIPopoverController*)pc
{
splitViewPopover = [pc retain];
// Other stuff
}
Because I do this I also have to release the reference when it is no longer valid:
- (void)splitViewController:(UISplitViewController*)svc
willShowViewController:(UIViewController *)aViewController
invalidatingBarButtonItem:(UIBarButtonItem *)button
{
[splitViewPopover release];
splitViewPopover = nil;
// Other stuff
}
Then, when an item has been selected in my master view controller, I update my detail controller and dismiss the popover:
[splitViewPopover dismissPopoverAnimated:NO];
精彩评论