明确关闭 UIActivityViewController 是否正确/可能(在 AirDrop 之后)?

Is it Correct / Possible to Explicitly Dismiss a UIActivityViewController (after AirDrop)?

在下面的屏幕截图中,一些数据已通过 AirDrop 成功发送。 UIActivityViewController 更新为在收件人下方显示 "Sent"取消 更改为 完成.

来自 UIActivityViewController 上的 Apple 文档:

Your app is responsible for configuring, presenting, and dismissing this view controller.

如果 UIActivityViewController 应该在 AirDrop 案例中被取消,完成处理程序是否应该用于此目的?

@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler

相关问题:

在进一步考虑文档以及使用内置 activity(例如 UIActivityTypeMail)或第三方 UIActivity 时的事件流之后,我认为以下...

1) AirDrop 是一种特殊情况,因为用户的交互是在UIActivityViewController 本身内执行的。 UIActivityViewController 中的 UI 会相应更新,应用程序应将 UIActivityViewController 留给用户(以及 Cancel / 完成 个按钮)。

2) 完成处理程序旨在 UIActivityViewController 被关闭后使用 ...

...而不是为了解雇 UIActivityViewController

为了进行实验,我添加了以下代码:

[controller setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError) {
    NSLog(@"completed: %@, \n%d, \n%@, \n%@,", activityType, completed, returnedItems, activityError);

}];
  • 在 AirDrop 的情况下,我在点击 Done 并且 UIActivityViewController 被(用户)关闭后得到了日志语句 - 而不是在 AirDrop 操作完成之后(并且显示 "Sent")。
  • 如果我使用内置的 activity(例如 UIActivityTypeMail)或自定义的第三方选项,这些操作 (a) 提供额外的 UI 和 (b)当用户完成 UI.
  • 时,导致 UIActivityViewController 被关闭

在这两种情况下,我都会在 UIActivityViewController 消失后得到日志语句。

关于Accessing the Completion Handler的文档其实写的很清楚:

The completion handler to execute after the activity view controller is dismissed.

@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler

Discussion When the user-selected service finishes operating on the data, or when the user dismisses the view controller, the view controller executes this completion handler to let your app know the final result of the operation.

我想这部分可能会更清楚:

When the user-selected service finishes operating on the data...

表示用户选择的服务完成将导致视图控制器的关闭。

3) 以下来自 Apple 关于 UIActivityViewController 的文档有点误导 :

Your app is responsible for configuring, presenting, and dismissing this view controller.