Поскольку completionHandler
на UIActivityViewController
был устарел в iOS 8, существует ли способ определить, какое расширение/активность домена было использовано пользователем?Укажите, какое расширение было использовано
5
A
ответ
14
Вам просто нужно использовать новый обработчик UIActivityViewControllerCompletionWithItemsHandler
:
typedef void (^UIActivityViewControllerCompletionWithItemsHandler)(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError);
Зов это следующим образом:
[yourActivityVC setCompletionWithItemsHandler:^(NSString *activityType, BOOL completed, NSArray *returnedItems, NSError *activityError){
}];
Кроме того, если вы задаетесь вопросом о зная, какой элемент был выбран, просто нужно обеспечить, чтобы ваши элементы активности соответствовали протоколу UIActivityItemSource
;
1
setCompletionWithItemsHandler только iOS8. Если вам необходимо поддерживать iOS6-7 тогда:
[yourActivityVC setCompletionHandler:^(NSString *activityType, BOOL completed){
}];
1
Это то, что мы использовали в Swift:
...
// Configure UIActivityViewController
let activityViewController = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
activityViewController.excludedActivityTypes = [UIActivityTypeAirDrop,
UIActivityTypeAddToReadingList,
UIActivityTypeAssignToContact,
UIActivityTypePrint,
UIActivityTypeCopyToPasteboard]
// Show UIActivityViewController
presentViewController(activityViewController, animated: true, completion: nil)
// Define completion handler
activityViewController.completionWithItemsHandler = doneSharingHandler
...
func doneSharingHandler(activityType: String?, completed: Bool, returnedItems: [AnyObject]?, error: NSError?) {
// Return if cancelled
if (!completed) {
return
}
// If here, log which activity occurred
println("Shared video activity: \(activityType)")
}
Хм, странно. Apple не упоминает об этом в документах только в API-интерфейсах ... Спасибо! – edc1591