我使用的是FPPopover类,它为iPhones创建弹出窗口。我遵循了自述文件中的准确步骤,但我使用的不是xib文件中的UIbutton,而是以编程方式创建的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];
}我在想,也许这和UIBarButtonItem有关,而不是UIButton?或者是别的什么?我尝试将UIBarButtonItem转换为UIButton,但仍然给出了相同的错误。有什么解决办法吗?
还有一个注意事项,以防万一:这就是我如何编程地创建导航栏以及bar按钮的方式:
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;发布于 2012-08-23 11:27:48
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];这应该管用!让我知道!
发布于 2012-08-18 10:21:40
这是b/c UIBarButtonItem从UIBarItem和NSObject继承的。只有从UIView继承的UI元素才具有superview属性。
发布于 2012-08-22 06:18:23
我也犯了同样的错误。解决方案是以编程方式创建一个UIButton (在UIBar按钮项的同一位置--设置适当的坐标),然后从UIButton中显示弹出。然后隐藏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
}希望这能有所帮助。如果你有什么问题请告诉我。
https://stackoverflow.com/questions/12017598
复制相似问题