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

时间:2015-08-03 12:37:58

标签: ios cocoa-touch airdrop

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

enter image description here

  • 在这种情况下,呈现视图控制器是否正确/良好实践/可能会解除UIActivityViewController
  • 或者该任务应留给用户(以及完成按钮)?

来自Apple UIActivityViewController上的文档:

  

您的应用负责配置,展示,和解雇此视图控制器。

如果在AirDrop案例中应该解除UIActivityViewController,那么完成处理程序是否应该用于此目的?

@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler

相关问题:

1 个答案:

答案 0 :(得分:2)

在进一步考虑文档以及使用内置活动(例如UIActivityTypeMail)或第三方UIActivity时的事件流程后,我认为以下内容...... < / p>

1)AirDrop是一个特例,因为用户的互动是在UIActivityViewController内进行的。 UIActivityViewController中的用户界面会相应更新,应用程序应该将UIActivityViewController解除给用户(以及取消 / 完成按钮)。

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操作完成后(和&# 34;已显示已发送&#34;
  • 如果我使用内置活动(例如UIActivityTypeMail)或自定义第三方选项,那些操作(a)会显示额外的用户界面,(b)会导致UIActivityViewController被解雇,当用户使用该UI完成时。

在这两种情况下,我都会在UIActivityViewController消失后收到日志声明。

关于Accessing the Completion Handler的文档实际上非常清楚:

  

解除活动视图控制器后执行的完成处理程序。

@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler
  

<强>讨论   当用户选择的服务完成对数据的操作时,或者当用户关闭视图控制器时,视图控制器将执行此完成处理程序,以使您的应用程序知道操作的最终结果。

我想如果这一部分可能更清楚了:

  

当用户选择的服务完成对数据的操作时......

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

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

  

您的应用负责配置,展示,和解雇此视图控制器。