据我从阅读文档中了解到,UIPopoverControllers仅在iPad上受支持。因此,如果您尝试将变量声明为UIPopoverController并在iPhone模拟器或iPhone上运行应用程序,则会出现如下错误:
UIPopoverController initWithContentViewController:]未在UIUserInterfaceIdiomPad下运行时调用
所以我有一个我正在尝试的通用monotouch应用程序,我想在用户使用iPad时使用UIPopoverController,对于iPhone,我有另一个解决方案。
这就是我现在宣布它的方式,但显然在iPhone上运行不起作用,我收到上述错误信息。
public partial class IOPSCalculatorViewController : UIViewController
{
static bool UserInterfaceIdiomIsPhone {
get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Phone; }
}
static bool UserInterfaceIdiomIsIPAD {
get { return UIDevice.CurrentDevice.UserInterfaceIdiom == UIUserInterfaceIdiom.Pad; }
}
UIPopoverController DetailViewPopover = new UIPopoverController(new PopoverContentViewController());
}
我怎样才能声明:
UIPopoverController DetailViewPopover = new UIPopoverController(new PopoverContentViewController());
部分如果该设备是iPad?我需要UIPopoverController在公共部分类中,以便我可以在其他地方公开访问它。
答案 0 :(得分:1)
不是在一行中声明和分配,而是将它分成两行。 E.g。
UIPopoverController DetailViewPopover = null;
if (IOPSCalculatorViewController.UserInterfaceIdiomIsIPAD) {
DetailViewPopover = new UIPopoverController (new PopoverContentViewController ());
}
如果DetailViewPopover
是(公共)字段而不是实例变量,那也是有效的,只要不调用UIPopoverController
构造函数,就不会出现错误。< / p>
答案 1 :(得分:0)
你需要找出你当前的设备是什么,并为iphone和iPad编写代码。这是我在我的案例中使用过的代码片段。
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone)
{
//Do your coding here
}
else {
if(![popoverController isPopoverVisible]){
contact = [[[ContactViewController alloc] initWithNibName:@"ContactViewController_iPad" bundle:nil] autorelease];
popoverController = [[[UIPopoverController alloc] initWithContentViewController:contact] retain];
[popoverController setPopoverContentSize:CGSizeMake(400.0f, 400.0f)];
[popoverController presentPopoverFromRect:CGRectMake(230, 860, 320.0f, 320.0f) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES];
[popoverController release];
}else{
[popoverController dismissPopoverAnimated:YES];
}
}
希望这会对你有所帮助。快乐的编码!!!