0

アクティビティビューを開くためにアクションボタンを押した後、もう一度アクションボタンを押すと、iPadシミュレーターでアプリがクラッシュします。ユーザーがポップオーバーの外側に触れるのではなく、もう一度ボタンを押してポップオーバーを閉じたい場合、これが問題になるのではないかと心配しています。任意の提案をいただければ幸いです:)

参考までに、アクションボタンは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]; }}
4

2 に答える 2

1

すでにポップアップがあるかどうかを確認し、別のことをしてください

-(IBAction)openUIActivityView:(id)sender {
    if (self.popup) {
        [self.popup dismiss ...];
    }
    else {
        // show popup code
    }
 }
于 2013-01-22T14:58:05.117 に答える
0

問題は、View Controller が常に 1 つの他の View Controller しか表示できないことです。現在、ボタンをもう一度タップすると、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.
}
于 2013-01-22T15:01:19.010 に答える