2015-08-03 20 views
0

在下面的屏幕截圖中,一些數據已成功通過AirDrop發送。 UIActivityViewController更新顯示「已發送」收件人和取消更改爲完成它是正確的/可能顯式關閉UIActivityViewController(AirDrop後)?

enter image description here

  • 在這種情況下,是不是正確/好的做法/可能,爲呈現視圖控制器駁回UIActivityViewController
  • 或者應該將該任務留給用戶(和完成按鈕)?

從蘋果的文檔上UIActivityViewController

您的應用程序負責配置,呈現,和駁回這個視圖控制器。

如果UIActivityViewController應該在AirDrop案件中被駁回,那麼完成處理程序是否應該用於此目的?

@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler 

相關問題:

回答

2

進一步審議的文件後,使用既可以當事件流內置的活動(例如UIActivityTypeMail )或第三方UIActivity,我認爲以下...

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動作完成(並顯示「已發送」)。
  • 如果我使用內置活動(例如UIActivityTypeMail)或自定義第三方選項,那麼這些操作(a)會呈現額外的UI,並且(b)導致UIActivityViewController被解僱,當用戶完成該UI時。

在這兩種情況下,我在UIActivityViewController消失後得到日誌語句。

關於Accessing the Completion Handler的文件實際上是相當清楚的:在活動視圖控制器駁回後

完成處理器來執行。

@property(nonatomic, copy) UIActivityViewControllerCompletionWithItemsHandler completionWithItemsHandler 

討論 當用戶選擇的服務完成對數據進行操作,或者當用戶取消視圖控制器,視圖控制器執行此完成處理程序,讓您的應用程序知道最終操作結果。

我想這可能是,如果這部分更加清晰:

當用戶選擇的服務完成對數據進行操作...

表示,選定的用戶服務完成將導致視圖控制器的解僱。

3)以下,從蘋果的UIActivityViewController文檔是有點誤導

您的應用程序負責配置,呈現,和駁回這個視圖控制器。