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

我正在使用为iPhones创buildpopup窗口的FPPopover类。 我遵循自述文件中的确切步骤,而不是从xib文件使用UIbutton,我使用以编程方式创build的UIBarButtonItem。 但是,我得到以下错误:

终止由于未捕获的exception'NSInvalidArgumentException'的应用程序,原因:' – [UIBarButtonItem superview]:无法识别的select发送到实例0x6a3e420'

我复制粘贴与自述文件相同的代码,但我只是改变(UIButton *)okButton与(id)发件人(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]; } 

我想也许这是不是UIButton的UIBarButtonItem? 还是别的吗? 我试着将UIBarButtonItem转换成UIButton,但仍然给了我相同的错误。 任何解决scheme?

还有一个注意事项,以防万一:这是我用编程方式创build导航栏以及酒吧button:

 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; 

presentPopoverFromView只接受一个UIView子类。 UIBarButtonItem不是UIView的子类,所以你需要find与该button项相关的视图。 这是我用FPPopoverController的解决scheme

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

这应该工作! 让我知道!

这是B / C UIBarButtonItem从UIBarItemNSObjectinheritance。 只有从UIViewinheritance的UI元素才具有superview属性。

我得到了同样的错误。 解决scheme是以编程方式创buildUIButton(在UIBarbutton项的相同位置 – 设置适当的坐标),然后从UIButton中呈现popup窗口。 然后隐藏UIButton。

这段代码适用于我:

 -(void)testMethod { UIButton *button = [UIButton buttonWithType:UIButtonTypeRoundedRect]; // set action as NULL if you dont need any method/functionality to call [button addTarget:self action:@selector(aMethod) forControlEvents:UIControlEventTouchDown]; [button setTitle:@"Show View" forState:UIControlStateNormal]; button.frame = CGRectMake(130, -40, 160.0, 40.0); [self.view addSubview:button]; AlertsViewController *controller = [[AlertsViewController alloc] init]; //our popover FPPopoverController *popover = [[FPPopoverController alloc] initWithViewController:controller]; //the popover will be presented from the Button view [popover presentPopoverFromView:button]; //hide the button button.hidden = YES; } -(void)aMethod { // Write any functionality if you need } 

希望这可以帮助。 让我知道如果你有任何问题。

大多数应用程序显示来自BarButtonItem的popup窗口。 FPPopOverController不支持这个。 所以,在我看来你应该使用: WYPopOverController