当我按下操作按钮后再次按下操作按钮打开我的活动视图时,我的应用程序在iPad模拟器中崩溃了。我担心如果用户想要再次按下按钮关闭Popover而不是触摸它之外,这将是一个问题。任何建议表示赞赏:)
仅供参考,操作按钮是UIToolbar按钮。
在.h
@property (strong, nonatomic) UIPopoverController *popup;
@property (strong, nonatomic) UIPopoverController *activityViewProp;
在.m:
-(IBAction)openUIActivityView:(id)sender {
UIActivityViewController *activityView = [[UIActivityViewController alloc]initWithActivityItems:@"Hello World" applicationActivities:nil];
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPhone) {
[self presentViewController:activityView animated:YES completion:^{
}];
} else {
self.popup = [[UIPopoverController alloc] initWithContentViewController:activityView];
[self.popup presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionDown animated:YES]; }}
答案 0 :(得分:1)
检查您是否已有弹出窗口,并执行其他操作
-(IBAction)openUIActivityView:(id)sender {
if (self.popup) {
[self.popup dismiss ...];
}
else {
// show popup code
}
}
答案 1 :(得分:0)
问题是,视图控制器只能在任何给定时间呈现另一个视图控制器。目前,当您再次点击该按钮时,您尝试呈现UIActivityViewController的新实例,而另一个已经呈现。
您可以通过检查主视图控制器的presentedViewController
属性的值来解决此问题。如果它不是nil(实际上是UIActivityViewController类型),你可以从动作返回而不做任何事情:
- (IBAction)openUIActivityView:(id)sender {
if (!self.presentedViewController) {
// We have no presented view controller yet.
// <your current code here>
} else {
// We are already presenting a view controller.
// Either dismiss it, or don't do anything.
}