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从UIBarItem
和NSObject
inheritance。 只有从UIView
inheritance的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