开发者

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];
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜