iPhone:使用FPPopover类与UIBarButtonItem一起使用时出错

Guy*_*her 13 iphone xcode objective-c ios

我正在使用FPPopover类为iPhones创建弹出窗口.我按照自述文件中的确切步骤,但不是使用xib文件中的UI按钮,而是使用以编程方式创建的UIBarButtonItem.但是,我收到以下错误:

因未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:' - [UIBarButtonItem superview]:无法识别的选择器发送到实例0x6a3e420'

我复制粘贴了自述文件中的相同代码,但我刚刚用(id)发送者更改了(UIButton*)okButton(这里的ID是UIBarButtonItem*)

-(void)popover:(id)sender
{
    //the view controller you want to present as popover
    TestClass *controller = [[TestClass alloc] init];
    //our popover
    FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:controller];
    //the popover will be presented from the okButton view
    [popover presentPopoverFromView:sender];
    //release
    [controller release];
}
Run Code Online (Sandbox Code Playgroud)

我想也许它与UIBarButtonItem有关,它不是UIButton?还是别的什么?我尝试将UIBarButtonItem转换为UIButton,但仍然给了我同样的错误.有什么解决方案吗?

还有一点需要注意:这是我以编程方式创建导航栏和条形按钮的方式:

UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(320, 0, 320, 44)];
UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"By Clubs"];
[navBar pushNavigationItem:navItem animated:NO];
UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Filter"
                                               style:UIBarButtonItemStyleBordered
                                              target:self
                                              action:@selector(popover:)];


navItem.rightBarButtonItem = editButton;
Run Code Online (Sandbox Code Playgroud)

小智 24

presentPopoverFromView只接受UIView子类.UIBarButtonItem不是UIView的子类,因此您需要找到与该按钮项相关的视图.这是我与FPPopoverController一起使用的解决方案

    UIBarButtonItem *buttonItem = sender;
    UIView* btnView = [buttonItem valueForKey:@"view"];
    //On these cases is better to specify the arrow direction
    [popover setArrowDirection:FPPopoverArrowDirectionUp];
    [popover presentPopoverFromView:btnView];
Run Code Online (Sandbox Code Playgroud)

这应该工作!让我知道!