UIActivityViewController UIActivityViewControllerCompletionWithItemsHandler

Cus*_*are 22 ios uiactivityviewcontroller swift

  • 项目清单

使用Swift作为在iOS 8中运行的应用程序,我需要编写一个完成处理程序,UIActivityViewController以捕获用户选择的"共享"方法的结果.

这是我到目前为止的代码片段.我的问题是如何设置avc.completionWithItemsHandler?我确信它很简单,但我没有看到它.

var activityItems = NSMutableArray()
activityItems.addObject("Email or text for 'share' goes here")

var avc = UIActivityViewController(activityItems: activityItems, applicationActivities: nil)
avc.setValue("Subject for Email", forKey: "Subject")

avc.completionWithItemsHandler = //Here is where I dont know what to do.

self.navigationController?.presentViewController(avc, animated: true, completion: nil)
Run Code Online (Sandbox Code Playgroud)

Ian*_*Ian 36

completionWithItemsHandler typealias:

typealias UIActivityViewControllerCompletionWithItemsHandler = (String?, Bool, [AnyObject]?, NSError?) -> Void
Run Code Online (Sandbox Code Playgroud)

注意:以前的代码块不会在您的项目中使用,它只显示所需的闭包类型(docs).

所以这些是传递给完成处理程序的参数,你可以这样做,所以完成处理程序看起来像这样:

avc.completionWithItemsHandler = { activity, success, items, error in 

}
Run Code Online (Sandbox Code Playgroud)


Jan*_*ann 12

注意:因为我没有阅读问题的"SWIFT"部分,所以我在Obj-C中回答了这个问题.我的坏,对OP:我道歉

这是一个更完整的答案,实际上可以编译.我用过:dispatch_async为了做一个警报,你可以看到"activityType"最终是什么.

avc.completionWithItemsHandler = ^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
    dispatch_async(dispatch_get_main_queue(), ^{
        UIAlertViewQuick(@"Activity Status", activityType, @"OK");
    });
    if (completed)
    {
        NSLog(@"The Activity: %@ was completed", activityType);
    }
    else
    {
        NSLog(@"The Activity: %@ was NOT completed", activityType);
    }
};
Run Code Online (Sandbox Code Playgroud)

  • 好吧,好吧,够了:)考虑我责备.我的错.我没有看到"斯威夫特"部分.(我真的没有).我要留下我的答案,但编辑它说我误解了问题.此外,我不能编辑我的投票cos回答是"16小时前,我不能编辑投票,除非答案被编辑"(由于某种原因) (4认同)