在下面的屏幕截图中,已经通过 AirDrop 成功发送了一些数据。 UIActivityViewController
更新以在收件人和取消下显示"已发送" 更改为完成。
UIActivityViewController
?来自Apple UIActivityViewController
上的文档:
您的应用负责配置,展示,和解雇此视图控制器。
如果在AirDrop案例中应该解除UIActivityViewController
,那么完成处理程序是否应该用于此目的?
@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler
相关问题:
答案 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);
}];
UIActivityViewController
被用户拒绝了 - 而不是在AirDrop操作完成后(和&# 34;已显示已发送&#34; 。UIActivityTypeMail
)或自定义第三方选项,那些操作(a)会显示额外的用户界面,(b)会导致UIActivityViewController
被解雇,当用户使用该UI完成时。在这两种情况下,我都会在UIActivityViewController
消失后收到日志声明。
关于Accessing the Completion Handler的文档实际上非常清楚:
解除活动视图控制器后执行的完成处理程序。
@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler
<强>讨论强> 当用户选择的服务完成对数据的操作时,或者当用户关闭视图控制器时,视图控制器将执行此完成处理程序,以使您的应用程序知道操作的最终结果。
我想如果这一部分可能更清楚了:
当用户选择的服务完成对数据的操作时......
表示用户选择的服务完成将导致视图控制器被解雇。
3)以下来自Apple关于UIActivityViewController的文档有点误导:
您的应用负责配置,展示,和解雇此视图控制器。