2011-08-02 22 views

Respuesta

6

ACTUALIZACIÓN:

Esto ya no funciona en iOS 6. Quick Look ejecuta en otro proceso utilizando XPC. Ver [aquí] [3] para más detalles. No preveo ninguna forma de personalizar QLPreviewController. La siguiente respuesta sigue siendo para cualquier persona interesada para pre-IOS 6.


Si desea eliminar simplemente el botón de acción que debe subclase QLPreviewController. Luego, en -viewWillAppear:, debe quitar el botón de acción llamando al [[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 ser personalizado. Puede consultar este repository 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 mejor solución pero más complicada es usar UIDocumentInteractionController. Por lo que entiendo de QLPreviewController es que está construido usando UIDocumentInteractionController. QLPreviewController fue hecho para uso general y fácil adición. UIDocumentInteractionController da 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.

EDIT:

he construido la capacidad de eliminar el botón de acción derecha en RBFilePreviewer por lo que no tiene que preocuparse de hacerlo usted mismo.

+0

Gracias. Solo funcionaba cuando establecíRightBarButtonItem: nil en "viewDidAppear" –

+1

-viewDidAppear es un lugar extraño para poner eso. ¿Funciona en -viewWillAppear? Eso sería mucho mejor si es posible. Además, ¿vas a votar/aceptar mi respuesta como correcta? – rbrown

+1

Resulta que quitar el botón de acción no es tan trivial como pensaba. QLPreviewController tiene muchas peculiaridades debajo. RBFilePreviewer ahora tiene esa característica incorporada y se ocupa de todos los casos diferentes. Además, arreglé un "error" en el QLPreviewController original que hace que no se muestre la barra de navegación del documento cuando se lo empuja en lugar de presentarlo de manera modal. También puede ver una demostración de RBFilePreviewer en mi repositorio de demostración: https://github.com/rob-brown/Demos. – rbrown

2

Si subclase QLPreviewController y luego agrega éste método:

-(void)viewDidAppear:(BOOL)animated{ 

    [[self navigationItem] setRightBarButtonItem:nil]; 
} 

en la subclase, el botón de acción desaparecerá notas como rbrown anteriormente. 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.

+0

Esto no funciona, al igual que la respuesta anterior de Neogene Sparanza, en caso de tener muchos documentos para previsualizar, todo se vuelve como antes después de cambiar el documento. – DisableR

+0

No funciona para iOS 8 GM Seed. – Meet

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

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

+0

También funciona para mí pero las flechas next y prev desaparecen curiosamente dejando dos botón negro vacío –

1

también necesito costumbre el elemento navigaiton de QLPreviewController. Al igual que rbrown, se dice que se usa XPC y ya no podemos agregar artículos 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 cableadas no funciona.

0

puedo solucionar 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 incorporar el previewController en un UIView, entonces sería no funciona!

0

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

Simplemente necesita subclase QLPreviewController y anular los métodos siguientes, a continuación, utilizar la subclase en lugar del 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 
} 
Cuestiones relacionadas