我正在使用以下代码进行iPad应用程序的popover。它适用于iPad应用程序,但当我使用相同的iPhone代码时,它会在
附近崩溃" UIPopoverController* removeDefaultPopover=[[UIPopoverController alloc]initWithContentViewController:NavController];"
能帮助我摆脱这个......
UIViewController *removeDefaultController = [[UIViewController alloc] init];
UIView *removeDefaultView = [[UIView alloc] init];
removeDefaultController.view = removeDefaultView;
removeDefaultController.contentSizeForViewInPopover = CGSizeMake(100, 100);
UINavigationController *NavController=[[UINavigationController alloc]initWithRootViewController:removeDefaultController];
UIPopoverController* removeDefaultPopover=[[UIPopoverController alloc]initWithContentViewController:NavController];
UIBarButtonItem *edit = [[UIBarButtonItem alloc] initWithTitle:@"EDIT" style:UIBarButtonItemStyleBordered target:self action:@selector(editDefaultLanguage)];
[removeDefaultController.navigationItem setRightBarButtonItem:edit animated:YES];removeDefaultPopover.delegate=self;
[removeDefaultPopover presentPopoverFromRect:CGRectMake(0, 0, 100, 100) inView:self.view permittedArrowDirections:NO animated:YES];
removeDefaultView.backgroundColor=[UIColor redColor];
答案 0 :(得分:2)
答案 1 :(得分:2)
根据Mark Sands UIPopoverController
包含以下代码:
- (id)initWithContentViewController:(UIViewController *)viewController {
if (([[UIDevice currentDevice] respondsToSelector:@selector(userInterfaceIdiom)]) {
if ([[UIDevice currentDevice] userInterfaceIdiom] != UIUserInterfaceIdiomPad) {
if ([UIPopoverController _popoversDisabled]) {
[NSException raise:NSInvalidArgumentException format:@"-[UIPopoverController initWithContentViewController:] called when not running under UIUserInterfaceIdiomPad."];
}
}
}
...
}
+ (BOOL)_popoversDisabled {
NSString *bundleIdentifier = [[NSBundle mainBundle] bundleIdentifier];
if ([bundleIdentifier isEqualToString:@"com.apple.iBooks"] || [bundleIdentifier isEqualToString:@"com.apple.mobilesafari"] ||
[bundleIdentifier isEqualToString:@"com.apple.itunesu"] || [bundleIdentifier isEqualToString:@"com.apple.Maps"]) {
return NO;
}
return YES;
}
如您所见,Apple的应用程序已启用UIPopoverController
。
您可以通过以下方式创建UIPopoverController子类并实现+ _popoversDisabled
:
+ (BOOL)_popoversDisabled {
return NO;
}
或者使用method swizzling。
答案 2 :(得分:1)
你不能使用" UIPopOverController"适用于iPhone应用程序,因为它仅适用于iPad设备。或者你可以使用CMPopTipView,它的工作方式与UiPopoverController类似。您可以在https://github.com/chrismiles/CMPopTipView
上查看此控件我在之前的应用程序中使用过此控件,效果很好。
答案 3 :(得分:0)
如前所述,UIPopoverController目前尚未在iPhone应用程序中启用。但是,如果您仍然喜欢我推荐的功能WEPopover。这是多么容易使用:
SettingsViewController *viewController = [[SettingsViewController alloc]init];
self.popover = [[WEPopoverController alloc]initWithContentViewController:viewController];
[self.popover presentPopoverFromRect:self.settingsButton.frame
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
所有正确的生命周期方法都被调用,它有几种方便的方法用于呈现,解雇等。我已经在几个项目中使用它并且对它非常满意。
使用它时唯一需要注意的是确保对popover对象保持强引用(因此,在我的示例中,您看到我使用self.popover而不是实例变量)。