2017-09-05 1 views
3

Pour des raisons de sécurité, je souhaite désactiver la nouvelle fonction de suppression iOS 11 glisser & dans l'ensemble de mon application. Plus précisément la partie glisser.Comment désactiver iOS 11 glisser dans l'ensemble de l'application?

Dans iOS 11, il se passe par défaut du texte dans tous les endroits où le texte peut être sélectionné - popups, textviews, webviews, etc.

Répondre

2

Trouvé une solution. C'est à la méthode swizzle la méthode isEnabled de UIDragInteraction pour retourner NO dans les situations que votre application peut avoir besoin. Notez que normalement ce n'est pas une bonne idée de faire un swizzle de méthode.

@implementation UIDragInteraction (TextLimitations) 
+ (void)load 
{ 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 

     Class class = [self class]; 

     SEL originalSelector = @selector(isEnabled); 
     SEL swizzledSelector = @selector(restrictIsEnabled); 

     Method originalMethod = class_getInstanceMethod(class, originalSelector); 
     Method swizzledMethod = class_getInstanceMethod(class, swizzledSelector); 

     BOOL didAddMethod = 
     class_addMethod(class, 
         originalSelector, 
         method_getImplementation(swizzledMethod), 
         method_getTypeEncoding(swizzledMethod)); 

     if (didAddMethod) { 
      class_replaceMethod(class, 
           swizzledSelector, 
           method_getImplementation(originalMethod), 
           method_getTypeEncoding(originalMethod)); 
     } else { 
      method_exchangeImplementations(originalMethod, swizzledMethod); 
     } 
    }); 
} 

-(BOOL)restrictIsEnabled 
{ 
    if (restrictedCondition) 
    { 
     return NO; 
    } 
    return [self restrictIsEnabled]; 
} 
3

Je ne suis pas au courant d'aucune façon de désactiver complètement la fonctionnalité glisser, mais Il existe un moyen de limiter la session de glisser à votre propre application uniquement. Cela devrait déjà être une grande amélioration en termes de sécurité.

Jetez un oeil à sessionIsRestrictedToDraggingApplication.

dragInteraction (_: sessionIsRestrictedToDraggingApplication :)

Appelés à demander à votre application si la session d'entraînement devrait se limiter à l'application dans laquelle il commence.

1

Glisser & La suppression n'est pas activée par défaut. Vous devez l'activer en fournissant un délégué d'interaction glisser à votre vue. Vous n'avez donc pas besoin de désactiver le glisser-déposer si vous ne l'avez pas implémenté.

Note:
Text views and text fields automatically support drag and drop. Mais il est son comportement par défaut pour permettre au contenu de copie d'une source à une autre source à l'aide UIMenuController. Glisser & drop permet de copier-coller facilement le contenu de votre texte pour les affichages de texte. Glisser & drop n'a aucun impact sur la sécurité des données, par rapport aux fonctionnalités actuelles stables du système d'exploitation pour le partage de données à l'aide de UIMenuController.


Voici la déclaration d'Apple pour la même chose.

Making a View into a Drag Source En mettant en œuvre un frein délégué d'interaction (UIDragInteractionDelegate) pour une vue, vous permettent ce point de vue de fonctionner comme une source de glisser dans votre application.


une option Activer Voir comme source Drag
ou sous-classe Toute instance de UIView peuvent agir comme une source de déplacement. Les premières étapes pour y arriver sont les suivantes:

  1. Créez une interaction de déplacement (une instance UIDragInteraction).
  2. Spécifiez le délégué de l'interaction de déplacement (objet conforme au protocole UIDragInteractionDelegate).
  3. Ajoutez l'interaction à la propriété d'interactions de la vue.

Voici comment faire en utilisant une méthode d'aide personnalisée, qui vous généralement appel dans une méthode viewDidLoad contrôleur de vue():

func customEnableDragging(on view: UIView, dragInteractionDelegate: UIDragInteractionDelegate) { 
    let dragInteraction = UIDragInteraction(delegate: dragInteractionDelegate) 
    view.addInteraction(dragInteraction) 
} 



Créer un Drag Item
A L'élément glisser encapsule les promesses d'une application source pour fournir une variété de représentations de données pour un objet de modèle.
Pour créer un élément de glisser, mettre en œuvre la méthode dragInteraction(_:itemsForBeginning:) dans votre délégué d'interaction de glisser, comme le montre ici sous une forme minimale:

func dragInteraction(_ interaction: UIDragInteraction, itemsForBeginning session: UIDragSession) -> [UIDragItem] { 
    // Cast to NSString is required for NSItemProviderWriting support. 
    let stringItemProvider = NSItemProvider(object: "Hello World" as NSString) 
    return [ 
     UIDragItem(itemProvider: stringItemProvider) 
    ] 
} 

Cette implémentation utilise le init (objet :) commodité initialiseur. Lorsque vous instanciez un élément de glissement, transmettez un objet dans la représentation native de votre application ou dans la représentation la plus haute fidélité que vous prenez en charge. En général, assurez-vous que le premier élément du tableau registeredTypeIdentifiers du fournisseur d'éléments représente les données les plus fidèles que votre délégué d'interaction glisser peut fournir. Pour ajouter plus de représentations de données à un élément de déplacement, comme vous le feriez habituellement dans votre application, ajoutez-les dans l'ordre de fidélité, du plus élevé au plus bas. Lors de l'ajout de représentations, vous avez le choix:

  • La meilleure option pour ajouter des données multiples représentations à un élément de glisser, dans de nombreux cas, est d'adopter le protocole NSItemProviderWriting dans votre classe de modèle. En utilisant ce protocole, vous placez le code pour fournir plusieurs représentations de données dans la classe de modèle.
  • Vous pouvez utiliser la méthode registerObject(_:visibility:) ou les méthodes associées de la classe NSItemProvider pour enregistrer explicitement des représentations de données.
+0

Cette option est activée par défaut pour les textes. –

+0

J'ai mis à jour ma réponse. J'espère qu'il vous sera utile de comprendre son impact sur la sécurité des données. – Krunal

+0

Désolé mais ce n'est pas une réponse à ma question. Je dois désactiver le déplacement du texte de mon application vers un autre. J'ai déjà désactivé tous les autres moyens de laisser le texte hors de l'application. –