puedo eliminar definitivamente como cerrar borrar aplicaciones ios drag-and-drop ios11

eliminar - Cómo deshabilitar iOS 11 arrastrando dentro de toda la aplicación?



itunes (3)

Por razones de seguridad, deseo desactivar la nueva característica de arrastrar y soltar de iOS 11 dentro de toda mi aplicación. Más específicamente, la parte de arrastre.

En iOS 11 está sucediendo de forma predeterminada para el texto en todos los lugares donde se puede seleccionar texto: ventanas emergentes, vistas de texto, vistas web, etc.


Encontré una solución. Es método Swizzle el método isEnabled de UIDragInteraction para devolver NO en las situaciones que su aplicación pueda necesitar. Tenga en cuenta que normalmente no es una buena idea utilizar Swizzle.

@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]; }


No conozco ninguna forma de desactivar completamente la funcionalidad de arrastre, pero hay una forma de limitar la sesión de arrastre a su propia aplicación. Eso ya debería ser una gran mejora en términos de seguridad.

Eche un vistazo a sessionIsRestrictedToDraggingApplication .

dragInteraction (_: sessionIsRestrictedToDraggingApplication :)

Se le pide que pregunte a su aplicación si la sesión de arrastre debe limitarse a la aplicación en la que comienza.


Arrastrar y soltar no está habilitado de forma predeterminada. Debe habilitarlo proporcionando delegado de interacción de arrastre a su vista. Por lo tanto, es posible que no necesite deshabilitar arrastrar y soltar, si no lo ha implementado.

Nota:
Las vistas de texto y los campos de texto admiten automáticamente arrastrar y soltar. Pero es su comportamiento predeterminado el permitir copiar contenidos de una fuente a otra usando UIMenuController. Arrastrar y soltar facilita copiar y pegar el contenido de texto para las vistas de entrada de texto. Arrastrar y soltar no tiene ningún impacto en la preocupación por la seguridad de los datos, en comparación con las funciones actuales estables del sistema operativo para compartir datos usando UIMenuController.


Aquí está la declaración de Apple para el mismo.

Hacer una vista en un origen de arrastre Al implementar un delegado de interacción de arrastre ( UIDragInteractionDelegate ) para una vista, habilita esa vista para que funcione como un origen de arrastre en su aplicación.


Habilite una vista como fuente de arrastre
Cualquier instancia o subclase de UIView puede actuar como una fuente de arrastre. Sus primeros pasos para que esto suceda son:

  1. Cree una interacción de arrastre (una instancia de UIDragInteraction).
  2. Especifique el delegado de la interacción de arrastre (un objeto que se ajusta al protocolo UIDragInteractionDelegate).
  3. Agregue la interacción a la propiedad de interacciones de la vista.

A continuación, le mostramos cómo hacerlo utilizando un método de ayuda personalizado, que normalmente llamaría dentro del método viewDidLoad () de un controlador de vista:

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



Crear un elemento de arrastre
Un elemento de arrastre encapsula las promesas de una aplicación fuente para proporcionar una variedad de representaciones de datos para un objeto modelo.
Para crear un elemento de arrastre, implemente el método dragInteraction (_: itemsForBeginning :) en su delegado de interacción de arrastre, como se muestra aquí en una forma mínima:

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) ] }

Esta implementación utiliza el inicializador de conveniencia init (objeto :). Cuando crea una instancia de un elemento de arrastre, pase un objeto en la representación nativa de su aplicación o en la representación de mayor fidelidad que admita. En general, asegúrese de que el primer elemento de la matriz registeredTypeIdentifiers del proveedor del elemento represente los datos de mayor fidelidad que pueda entregar su delegado de interacción de arrastre.

Para agregar más representaciones de datos a un elemento de arrastre, como lo haría normalmente en su aplicación, agréguelos en orden de fidelidad, de mayor a menor. Al agregar representaciones, tiene opciones:

  • La mejor opción para agregar representaciones de datos múltiples a un elemento de arrastre, en muchos casos, es adoptar el protocolo NSItemProviderWriting en su clase de modelo. Usando este protocolo, coloca el código para proporcionar representaciones de datos múltiples dentro de la clase de modelo.
  • Puede usar el método registerObject(_:visibility:) , o los métodos relacionados, de la clase NSItemProvider , para registrar explícitamente las representaciones de datos.