iOS - Create an Popover View using StoryBoard

前端 未结 1 2013
梦如初夏
梦如初夏 2020-12-10 09:00

Hi there, Now I\'m trying to create a Pop-OverView using an Xcode storyboard. Firstly, I have

rootViewController, UIViewController, and UITableViewControlle         


        
相关标签:
1条回答
  • 2020-12-10 09:37

    I had the same problem and mostly found the solution here. Basically you change the action of the button each time it's pressed to either display or dismiss the popover. Here's the code I ended up with:

    @interface FilterTableViewController : UITableViewController {
        UIPopoverController *editPopover;
        id saveEditSender;
        id saveEditTarget;
        SEL saveEditAction;
    }
    
    -(void)prepareForSegue:(UIStoryboardPopoverSegue *)segue sender:(id)sender{
        if([[segue identifier] isEqualToString:@"EditFilterSegue"]){
            // Save the edit button's info so we can restore it
            saveEditAction = [sender action];
            saveEditTarget = [sender target];
            saveEditSender = sender;
    
            // Change the edit button's target to us, and its action to dismiss the popover
            [sender setAction:@selector(dismissPopover:)];
            [sender setTarget:self];
    
            // Save the popover controller and set ourselves as the its delegate so we can
            // restore the button action when this popover is dismissed (this happens when the popover
            // is dismissed by tapping outside the view, not by tapping the edit button again)
            editPopover = [(UIStoryboardPopoverSegue *)segue popoverController];
            editPopover.delegate = (id <UIPopoverControllerDelegate>)self;
        }
    }
    
    -(void)dismissPopover:(id)sender
    {
        // Restore the buttons actions before we dismiss the popover
        [saveEditSender setAction:saveEditAction];
        [saveEditSender setTarget:saveEditTarget];
        [editPopover dismissPopoverAnimated:YES];
    }
    
    -(BOOL)popoverControllerShouldDismissPopover:(UIPopoverController *)popoverController
    {
        // A tap occurred outside of the popover.
        // Restore the button actions before its dismissed.
        [saveEditSender setAction:saveEditAction];
        [saveEditSender setTarget:saveEditTarget];
    
        return YES;
    }
    
    - (void)viewWillDisappear:(BOOL)animated
    {
        [super viewWillDisappear:animated];
    
        // Before we navigate away from this view (the back button was pressed)
        // remove the edit popover (if it exists).
        [self dismissPopover:saveEditSender];
    }
    
    0 讨论(0)
提交回复
热议问题