2

UIActivityViewController を使用して共有オプションを表示していますが、ユーザーが UIActivityViewController を閉じたとき、または「activityDidFinish:(bool)completed」に続くアニメーションが終了したときに、別のビュー コントローラーを表示したいと考えています。UIActivityViewController の完了ハンドラーで他​​のコントローラーを提示しようとすると、次の警告が表示され、2 番目の VC がまったく表示されません!

プレゼンテーションの進行中に <###> で <_UIViewController: 0x1e16f020> を提示しようとしました!

UIActivityViewController activityVC = [[UIActivityViewController alloc]initWithActivityItems:selectedAssetsURL applicationActivities:nil];

[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
    NSLog(@"completed");
    //Present another VC
}];

問題は、UIActivityViewController が画面から消えるタイミングを知る方法です。UIActivityViewController を提示するビュー コントローラーの -ViewDidAppear メソッドでさえ、起動されません!

4

1 に答える 1

2

このリンクには、UIActivityViewController の仕組みに関する優れた情報があります。

http://www.apeth.com/iOSBook/ch26.html#_activity_view

基本的に、UIActivityViewController を別のクラスにサブクラス化し、いつ破棄されたかを知るメソッドを実装できます。

UIActivityViewController* avc =
[[UIActivityViewController alloc]
    initWithActivityItems:@[myCoolString]
    applicationActivities:@[[MyCoolActivity new]]];

MyCoolActivity の実装の準備部分は次のとおりです。

-(NSString *)activityType {
return @"com.neuburg.matt.coolActivity"; // make up your own unique string
}

-(NSString *)activityTitle {
    return @"Be Cool";
}

-(UIImage *)activityImage {
    return self.image; // prepared beforehand
}

-(BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
    for (id obj in activityItems) {
        if ([obj isKindOfClass: [NSString class]])
            return YES;
    }
    return NO;
}

-(void)prepareWithActivityItems:(NSArray *)activityItems {
    self.items = activityItems;
}

アクティビティを実行するには、次の 2 つの方法のいずれかを実装します。

-(void)performActivity {
// ... do something with self.items here ...
[self activityDidFinish:YES];
}

-(UIViewController *)activityViewController {
    MustacheViewController* mvc = [MustacheViewController new];
    mvc.activity = self;
    mvc.items = self.items;
    return mvc;
}

そして、MustacheViewController は次のようなコードになります。

- (IBAction)doCancel:(id)sender {
    [self.activity activityDidFinish:NO];

}
- (IBAction)doDone:(id)sender {
    [self.activity activityDidFinish:YES];

}
于 2013-09-03T09:30:13.963 に答える