开发者

Displaying WEPopover from UIButton instead of UIBarButtonItem

开发者 https://www.devze.com 2023-04-10 07:17 出处:网络
I am using WEPopover in my app to pop up a popover controller containg some buttons,it works when i put wepopover controller action in tabbarIteam but i need to get popover when i click UIButton.How t

I am using WEPopover in my app to pop up a popover controller containg some buttons,it works when i put wepopover controller action in tabbarIteam but i need to get popover when i click UIButton.How to do this this is my barbuttonitem code for displaying popover.

-(IBAction)_clickbtnAccount:(id)sender
{
    if (!self.popoverController)
    {
        UIViewController *contentViewController = [[pageAccount alloc]initWithNibName:@"pageAccount" bundle:nil];
        self.popoverController = [[[popoverClass alloc] initWithContentViewController:contentViewController] autorelease];
        self.popoverController.delegate = self;
        self.popoverController.passthroughViews = [NSArray arrayWithObject:self.navigationController.navigationBar];

        [self.popoverController presentPopoverFromBarButtonItem:sender
                                       permittedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown) 
                                                       animated:YES];
        [contentViewController release];
    }
    else
    {
        [self.popoverController dismissPopoverAnimated:YES];
        self.popoverController = nil;
    }
}

-(IBAction)_clickbtnAccount开发者_C百科:(id)sender
{
    if (!self.popoverController)
    {
        UIButton *senderButton = (UIButton *)sender;
        [self.popoverController presentPopoverFromRect:[senderButton frame]
                                                inView:@"pageAccount"
                              permittedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown) 
                                              animated:YES];        
    }
    else
    {
        [self.popoverController dismissPopoverAnimated:YES];
        self.popoverController = nil;
    }
}


So you don't want to display a WEPopoverfrom an UIBarButtonItem but from an UIButton, right?! Just use

- (void)presentPopoverFromRect:(CGRect)rect 
                    inView:(UIView *)view 
  permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections 
                  animated:(BOOL)animated;

instead of

- (void)presentPopoverFromBarButtonItem:(UIBarButtonItem *)item 
           permittedArrowDirections:(UIPopoverArrowDirection)arrowDirections 
                           animated:(BOOL)animated;

and pass in the rect of your UIButton.

Taking your code as an example:

-(IBAction)_clickbtnAccount:(id)sender
{
    if (!self.popoverController) {

        UIViewController *contentViewController = [[pageAccount alloc]initWithNibName:@"pageAccount" bundle:nil];
        self.popoverController = [[[popoverClass alloc] initWithContentViewController:contentViewController] autorelease];
        self.popoverController.delegate = self;
        self.popoverController.passthroughViews = [NSArray arrayWithObject:self.navigationController.navigationBar];

        UIButton *senderButton = (UIButton *)sender;
        [self.popoverController presentPopoverFromRect:[senderButton frame]
                        inView:self.view
                                        permittedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown) 
                  animated:YES];

        [contentViewController release];
    } else {
        [self.popoverController dismissPopoverAnimated:YES];
        self.popoverController = nil;
    }
}


WEPopover is basically used to show multiple options inside a popover with much control using UITableview.

This is how i use WEPopOver to show popup on a button click

-(void)showPopOver:(id)sender{
    if (self.popoverController) {
            [self.popoverController dismissPopoverAnimated:YES];
            self.popoverController = nil;
        } 
        PopOverTable *contentViewController = [[PopOverTable alloc] initWithStyle:UITableViewStylePlain];
        contentViewController.delegatePopoverItemSelectedDelegate=self;
            rectForPopover = [self.view convertRect:btn.bounds fromView:btn];
                self.popoverController = [[[popoverClass alloc] initWithContentViewController:contentViewController] autorelease];

                if ([self.popoverController respondsToSelector:@selector(setContainerViewProperties:)]) {
                    [self.popoverController setContainerViewProperties:[self improvedContainerViewProperties]];
                }
                self.popoverController.delegate = self;
                [self.popoverController presentPopoverFromRect:rectForPopover  
                                                        inView: self.view 
                                      permittedArrowDirections:(UIPopoverArrowDirectionAny)
                                                      animated:YES];
        }


With the accepted solution I get rotation issues for the WEPopover under iOS 7: Basically it was pointing to a custom button in the UIBarButtonItem on the left of the navigation bar but on rotation the pop up moves to the right side of the screen and stays there on further rotations.

0

精彩评论

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