我正在尝试在按下barButton时显示popoverView。不幸的是,每次我尝试调用它时,应用程序都会发出SIGABRT信号。 “Empty.xib”确实有一个设计的视图。 (因为我正在使用barButton,我无法使用框架,如果您有解决方法,请同样说明。)
- (IBAction)loadPopover:(id)sender
{
UIView *someView = [[UIView alloc] init];
UIViewController *someVC = [[UIViewController alloc] initWithNibName:@"Empty.xib" bundle:[NSBundle mainBundle]];
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:someVC];
someView.frame = CGRectMake(0, 44, 320, 372);
someView.backgroundColor = [UIColor lightGrayColor];
popoverController.delegate = self;
self.popoverView = popoverController;
[self.popoverView presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
// CGRect popoverRect = [self.view convertRect:[btn frame] fromView:[btn superview]];
CGRect popoverRect = CGRectMake(0, 88, 320, 311);
popoverRect.size.width = MIN(popoverRect.size.width, 100);
[self.popoverView presentPopoverFromRect:popoverRect inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
}
答案 0 :(得分:0)
这里很少有建议。
检查view
的插座是否已连接
为什么需要像以下一样分配UIView
? UIView *someView = [[UIView alloc] init];
检查发件人的类型是否为UIBarButtonItem
self.popoverView
的保留政策是什么?检查它是retain
还是strong
(如果是ARC)
为什么要两次出示popover?
说这是一个简单的片段。
UIBarButtonItem* barButton = (UIBarButtonItem*)sender;
UIViewController *someVC = [[UIViewController alloc] initWithNibName:@"Empty" bundle:[NSBundle mainBundle]];
UIPopoverController *popoverController = [[UIPopoverController alloc] initWithContentViewController:someVC];
popoverController.delegate = self;
self.popoverView = popoverController;
[self.popoverView setPopoverContentSize:CGSizeMake(300, 200)];
[self.popoverView presentPopoverFromBarButtonItem:barButton permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
P.S。如果不使用ARC,请注意记忆。
希望它有所帮助。
答案 1 :(得分:0)
从.xib
移除initWithNibName:@"Empty.xib"
部分。将行改为:
UIViewController *someVC = [[UIViewController alloc] initWithNibName:@"Empty" bundle:nil];
修改强>
来自here -
nib文件名不应包含任何前导路径信息。