UIPopOverController + UITableView - Hide popover when cell is selected

ε祈祈猫儿з 提交于 2019-12-21 09:15:36

问题


In my Popover controller, i'm having a table view. On selection of a cell, I want to hide the pop over. How can I achieve it.


回答1:


In Header file of Root view controller:

@property (strong, nonatomic) UIStoryboardPopoverSegue* popSegue;

In the implementation file:

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if( [[segue identifier] isEqualToString:@"popover"] )
    {
        NSLog(@"%@",[segue destinationViewController]);
        self.popSegue = (UIStoryboardPopoverSegue*)segue;

        [[segue destinationViewController] setDelegate:self];
    }
}

When ever you want to hide the pop over:

    if ([self.popSegue.popoverController isPopoverVisible]) 
    {
        [self.popSegue.popoverController dismissPopoverAnimated:YES];        
    }

In the table view, add a delegate and implement the delegate in root view controller. When the delegate method is called, use above code to dismiss the pop over.




回答2:


Allow me to suggest a slightly different solution, which consists in passing the popover controller reference instead of the segue reference.

In the implementation file of the source view controller:

-(void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    if ([[segue destinationViewController] isKindOfClass:[MyDestViewController class]]) {
        MyDestViewController* viewController = (MyDestViewController*)[segue destinationViewController];
        UIStoryboardPopoverSegue* popoverSegue = (UIStoryboardPopoverSegue*)segue;
        [viewController setPopoverController:[popoverSegue popoverController]];
    }
}

In the header file of the destination view controller:

@property (weak, nonatomic) UIPopoverController* popoverController;

In the implementation file of the destination view controller:

@synthesize popoverController;

Same file, whenever you want to dismiss the popover:

[popoverController dismissPopoverAnimated:YES];



回答3:


The apple docs recommend the following:

Dismissing a popover programmatically requires a pointer to the popover controller. The only way to get such a pointer is to store it yourself, typically in the content view controller. This ensures that the content view controller is able to dismiss the popover in response to appropriate user actions.

http://developer.apple.com/library/ios/#documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/Popovers.html




回答4:


in didSelectRowAtIndexPath try this code

[viewController.popoverController dismissPopoverAnimated:YES];


来源:https://stackoverflow.com/questions/7933572/uipopovercontroller-uitableview-hide-popover-when-cell-is-selected

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!