【问题标题】:Displaying WEPopover from UIButton instead of UIBarButtonItem从 UIButton 而不是 UIBarButtonItem 显示 WEPopover
【发布时间】:2011-10-04 13:48:19
【问题描述】:

我在我的应用程序中使用 WEPopover 来弹出一个包含一些按钮的弹出控制器,当我将 wepopover 控制器操作放入 tabbarIteam 时它可以工作,但是当我单击 UIButton 时我需要弹出窗口。如何做到这一点这是我的 barbuttonitem 代码用于显示弹出框。

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

【问题讨论】:

    标签: ios cocoa-touch uibutton popover


    【解决方案1】:

    所以您不想显示来自UIBarButtonItemWEPopover,而是来自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;
        }
    }
    

    【讨论】:

    • 谢谢你的回答,但你能解释一下如何通过我的按钮的矩形吗?
    • -(IBAction)_clickbtnAccount:(id)sender { if (!self.popoverController) { UIButton *senderButton = (UIButton *)sender; [self.popoverController presentPopoverFromRect:[senderButton frame] inView:@"pageAccount" allowedArrowDirections:(UIPopoverArrowDirectionUp|UIPopoverArrowDirectionDown) 动画:YES]; } else { [self.popoverControllerdismissPopoverAnimated:YES]; self.popoverController = nil; } }
    • 你必须传递一个UIView(而不是@"pageAccount"),例如self.view.
    • 是的,.... 表示您未包含在更新问题中的原始代码。我再次修改了我的答案 - 试一试。
    • 天哪,再次没有按钮点击事件
    【解决方案2】:

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

    【讨论】:

    • delegatePopoverItemSelectedDelegate:这不是结构或联合和 rectforpopover 未分类错误
    • dude..它是我的 PopOverTable 类的代表。使用您自己的班级代表。您不是要在 popOver 中显示表格吗?
    【解决方案3】:

    使用公认的解决方案,我在 iOS 7 下遇到了 WEPopover 的旋转问题:基本上它指向导航栏左侧 UIBarButtonItem 中的自定义按钮,但旋转时弹出窗口移动到屏幕右侧并在进一步的旋转中停留在那里。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多