3 votes

Comment supprimer "Ajouter à iCloud Drive" du contrôleur UIActivity?

Je veux supprimer l'option "iCloud Drive" du contrôleur UIActivity partage, voici un aperçu.

entrer la description de l'image ici

J'ai essayé ceci, mais cela ne fonctionne pas en swift 3.

activityViewController.excludedActivityTypes = [.assignToContact,.copyToPasteboard,.print,.saveToCameraRoll,.addToReadingList,UIActivityType(rawValue: "com.apple.reminders.RemindersEditorExtension"),UIActivityType(rawValue: "com.apple.mobilenotes.SharingExtension"),UIActivityType(rawValue: "com.apple.iCloudDrive.ShareExtension"),UIActivityType(rawValue: "com.apple.mobileslideshow.StreamShareService")]

2voto

mm282 Points 207

Peut aider en fonction de la version:

Apple ne cesse de changer l'ID du bundle pour cette extension. Vous pourriez avoir besoin d'exclure ceci aussi, mais cela dépend de la version de l'iOS SDK:

UIActivityType(rawValue: "com.apple.CloudDocsUI.AddToiCloudDrive")

Fournisseurs d'éléments d'activité après la sélection de l'utilisateur:

Vous pourriez également transmettre des objets UIActivityItemProvider au lieu d'objets bruts à votre initialisateur UIActivityViewController. Malheureusement, cela ne change pas les options activées dans l'interface utilisateur, mais cela se fermera s'il n'y a aucun élément retourné après la sélection de l'utilisateur.

Tout d'abord, créez une nouvelle classe pour votre fournisseur. Vous pourriez l'utiliser pour retourner différents contenus basés sur différents fournisseurs aussi! Par exemple, une image et un texte pour le mail, seulement du texte pour iMessage.

class ShareActivityItemProvider: UIActivityItemProvider {
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
    print("type d'activité sélectionné: \(activityType.rawValue)")
    // Ce sont vos types d'activité acceptés
    if activityType == .postToFacebook || activityType == .postToTwitter || activityType == .postToWeibo || activityType == .mail || activityType == .message {
        return placeholderItem
    }
    return nil
}

}

Ensuite, vous initialisez votre UIActivityItemProvider comme ceci:

let avc = UIActivityViewController(activityItems: [ShareActivityItemProvider(placeholderItem: "Message de test ou tout objet")], applicationActivities: nil)

Ou, la manière bricolage mais légale de faire ce que vous voulez:

Après ce qui précède, vous pourriez ajouter une UIImage vide de substitution, supprimer les options supplémentaires qui sont maintenant disponibles, et ne retourner que ce que vous voulez de votre fournisseur:

let avc = UIActivityViewController(activityItems: [ShareActivityItemProvider(placeholderItem: "Message de test ou tout objet"), ShareActivityItemProvider(placeholderItem: UIImage())], applicationActivities: nil)

avc.excludedActivityTypes = [.assignToContact, .saveToCameraRoll, ... autres ...]

class ShareActivityItemProvider: UIActivityItemProvider {
override func activityViewController(_ activityViewController: UIActivityViewController, itemForActivityType activityType: UIActivityType) -> Any? {
    print("type d'activité \(activityType.rawValue) \(activityType)")
    if placeholderItem is String, activityType == .postToFacebook || activityType == .postToTwitter || activityType == .postToWeibo || activityType == .mail || activityType == .message {
        return placeholderItem
    }
    return nil
}

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X