我正在使用UIActivityViewController来呈现共享选项,并且当用户关闭UIActivityViewController或者当“activityDidFinish:(bool)completed”之后的动画结束时,我想显示另一个视图控制器。当我尝试在UIActivityViewController的完成处理程序中呈现其他控制器时,我收到以下警告,第二个VC根本没有显示!
尝试出现< _UIViewController:0x1e16f020> on< ###>演示文稿正在进行中!
UIActivityViewController activityVC = [[UIActivityViewController alloc]initWithActivityItems:selectedAssetsURL applicationActivities:nil];
[activityVC setCompletionHandler:^(NSString *activityType, BOOL completed) {
NSLog(@"completed");
//Present another VC
}];
问题是,如何知道UIActivityViewController何时从屏幕上消失?即使是呈现UIActivityViewController的视图控制器的-ViewDidAppear方法也不会被触发!
答案 0 :(得分:1)
在此链接中,有关于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;
}
要执行活动,我们实施以下两种方法之一:
-(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];
}