首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iPhone:在与UIBarButtonItem一起使用FPPopover类时出错

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

Stack Overflow用户
提问于 2012-08-18 09:50:17
回答 4查看 2.1K关注 0票数 13

我使用的是FPPopover类,它为iPhones创建弹出窗口。我遵循了自述文件中的准确步骤,但我使用的不是xib文件中的UIbutton,而是以编程方式创建的UIBarButtonItem。但是,我得到了以下错误:

由于未识别的异常“NSInvalidArgumentException”终止应用程序,原因:'-UIBarButtonItem superview:未识别的选择器发送到实例0x6a3e420‘

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

代码语言:javascript
复制
-(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];
}

我在想,也许这和UIBarButtonItem有关,而不是UIButton?或者是别的什么?我尝试将UIBarButtonItem转换为UIButton,但仍然给出了相同的错误。有什么解决办法吗?

还有一个注意事项,以防万一:这就是我如何编程地创建导航栏以及bar按钮的方式:

代码语言:javascript
复制
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;
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-08-23 11:27:48

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

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

这应该管用!让我知道!

票数 24
EN

Stack Overflow用户

发布于 2012-08-18 10:21:40

这是b/c UIBarButtonItemUIBarItemNSObject继承的。只有从UIView继承的UI元素才具有superview属性。

票数 2
EN

Stack Overflow用户

发布于 2012-08-22 06:18:23

我也犯了同样的错误。解决方案是以编程方式创建一个UIButton (在UIBar按钮项的同一位置--设置适当的坐标),然后从UIButton中显示弹出。然后隐藏UIButton。

这段代码适用于我:

代码语言:javascript
复制
-(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
}

希望这能有所帮助。如果你有什么问题请告诉我。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12017598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档