从UIButton而不是UIBarButtonItem显示WEPopover

时间:2011-10-04 13:48:19

标签: ios cocoa-touch uibutton popover

我在我的应用程序中使用WEPopover弹出一个包含一些按钮的弹出控制器,当我在tabbarIteam中输入wepopover控制器动作时它会起作用但是当我点击UIButton时我需要弹出窗口。如何执行此操作这是我的barbuttonitem代码用于显示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:(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;
    }
}

3 个答案:

答案 0 :(得分:3)

因此,您不希望显示WEPopover中的UIBarButtonItem,而是来自UIButton,对吧?! 只需使用

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

而不是

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

并传入UIButton的矩形。

以您的代码为例:

-(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;
    }
}

答案 1 :(得分:0)

WEPopover主要用于在使用UITableview进行大量控制的弹出框内显示多个选项。

这就是我使用WEPopOver在点击按钮上显示弹出窗口的方法

-(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];
        }

答案 2 :(得分:0)

使用已接受的解决方案,我在iOS 7下获得WEPopover的轮换问题:基本上它指向导航栏左侧UIBarButtonItem中的自定义按钮,但在旋转时弹出窗口移动到屏幕右侧并继续轮流。