ios pdf qlpreviewcontroller

ios - Cómo deshabilitar el botón de impresión QLPreviewController



pdf (6)

¿Alguien puede decirme cómo quitar el botón de impresión QLPreviewController? También me gustaría desactivar cortar / pegar / copiar.


-(void)viewDidAppear:(BOOL)animated{ [super viewDidAppear:animated]; [self navigationItem].rightBarButtonItems = nil; }

Funciona para mí en lugar de [[self navigationItem] setRightBarButtonItem:nil];


Si subclasifica QLPreviewController y luego agrega este método:

-(void)viewDidAppear:(BOOL)animated{ [[self navigationItem] setRightBarButtonItem:nil]; }

en la subclase, el botón de acción desaparecerá como las notas de marrón arriba. Esto no funcionará si usa viewWillAppear . Además, un efecto secundario inesperado de hacer esto es que la barra de herramientas en la vista previa ahora aparece en todo momento, en lugar de solo cuando toca la vista.


Resuelvo este problema de esta manera:

UIView *viewPreviewController; //from storyboard QLPreviewController *previewController = [[QLPreviewController alloc] init]; previewController.delegate = self; previewController.dataSource = self; previewController.currentPreviewItemIndex = 0; [previewController.view setFrame:CGRectMake(0,0, self.viewPreviewController.frame.size.width, self.viewPreviewController.frame.size.height)]; [previewController.navigationController setHidesBarsOnTap:YES]; previewController.navigationItem.rightBarButtonItems = nil; [self.viewPreviewController addSubview:previewController.view];

Si no hubiera incorporado el previewController en una UIView, ¡no funcionaría!


He encontrado una solución para desactivar el rightBarButtonItem en QLPreviewController que funciona bien para mí en iOS8 y iOS9

Simplemente necesita subclasificar QLPreviewController y anular los siguientes métodos, luego usar su subclase en lugar del QLPreviewController original QLPreviewController

- (void)viewDidLoad { [super viewDidLoad]; // When coming back from background we make sure the share button on the rightbBarButtonItem is disabled __weak typeof(self) weakSelf = self; [[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:[NSOperationQueue mainQueue] usingBlock:^(NSNotification * _Nonnull note) { weakSelf.navigationItem.rightBarButtonItem.enabled = NO; }]; } - (void)dealloc { [[NSNotificationCenter defaultCenter] removeObserver:self]; } - (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; self.navigationItem.rightBarButtonItem.enabled = NO; // Disable the share button } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; self.navigationItem.rightBarButtonItem.enabled = NO; // Disable the share button }


También necesito personalizar el elemento de QLPreviewController de QLPreviewController . Como dijo rbrown , se usa XPC y ya no podemos agregar elementos personalizados en viewDidLoad o viewWillAppear .

Actualmente uso de esta manera:

  1. crear una nueva clase de UIViewController
  2. agregar la vista de QLPreviewController a la nueva clase

Parece cableado pero funciona.


ACTUALIZAR:

Esto ya no funciona en iOS 6. Quick Look se ejecuta en otro proceso usando XPC. Ver [aquí] [3] para más detalles. No preveo ninguna forma de personalizar QLPreviewController. La siguiente respuesta queda para cualquier persona interesada antes de iOS 6.

Si simplemente desea eliminar el botón de acción, debe QLPreviewController subclase QLPreviewController . Luego, en -viewWillAppear: debe quitar el botón de acción llamando a [[self navigationItem] setRightBarButtonItem:nil]; Esto también eliminará la posibilidad de compartir archivos con otras aplicaciones. Si estás bien con esa pérdida, entonces esa es la solución más fácil. Una cosa a tener en cuenta es que QLPreviewController NO está destinado a personalizarse. Puedes ver este repositorio en Github. Contiene un QLPreviewController que ya está subclasificado de forma segura. Solo necesita agregar una línea para eliminar el botón de acción. El repositorio también tiene otras comodidades.

La solución mejor pero más complicada es usar UIDocumentInteractionController . Por lo que entiendo de QLPreviewController es que está construido usando UIDocumentInteractionController . QLPreviewController se hizo para uso general y fácil adición. UIDocumentInteractionController proporciona mucho más control, pero es más difícil de usar. No puedo describir suficientemente cómo usarlo aquí. Recomiendo ver la sesión de WWDC 2010 106 Comprender el controlador de interacción de documentos.

En cuanto a deshabilitar cortar / copiar / pegar, no puede hacer eso con QLPreviewController . Es posible que pueda hacer eso con UIDocumentInteractionController , pero no contaría con eso. Dependiendo de qué archivos desee visualizar, es posible que pueda realizar una implementación completamente personalizada, pero eso es mucho trabajo. Es relativamente fácil hacer que los espectadores encuentren texto sin formato, fotos, videos y archivos PDF. Los documentos de Office cuestan más de lo que vale.

EDITAR:

He desarrollado la capacidad de eliminar el botón de acción directamente en RBFilePreviewer para que no tengas que preocuparte por hacerlo tú mismo.