2

我正在使用 UIActivityViewController 来呈现共享选项,并且我想在 UIActivityViewController 被用户关闭或跟随“activityDidFinish:(bool)completed”的动画结束时显示另一个视图控制器。当我尝试在 UIActivityViewController 的完成处理程序中显示另一个控制器时,我收到以下警告,并且第二个 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.aeth.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;
}

为了执行该活动,我们实现了以下两种方法之一:

-(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 回答