objective c - UIDocumentInteractionController que agrega acciones personalizadas al menú(por ejemplo, correo electrónico, guardar en fotos)
objective-c ios (4)
Empecé a usar UIDocumentInteractionController para una nueva aplicación, pero me pregunto cómo agregar acciones adicionales al menú de acciones que aparece en la pantalla de vista previa.
Parece que el menú solo enumera las aplicaciones que se han registrado para un tipo de url determinado, además de que veo PRINT mostrando en iOS4.2. Me gustaría agregar enviar por correo electrónico y guardar en las fotos, pero no veo una manera de ampliar este menú. Puedo codificar las acciones que deseo. ¿Es correcto agregarlas al menú que parece imposible?
¿Me estoy perdiendo algo obvio?
Estás en lo correcto, estos son los métodos.
- (BOOL) documentInteractionController: (UIDocumentInteractionController *) controller performAction: (SEL) action
- (BOOL) documentInteractionController: (UIDocumentInteractionController *) controller canPerformAction: (SEL) action
Los selectores de acción admitidos para estos métodos son copiar: e imprimir:.
No puedo comentar aún, así que estoy respondiendo :-)
Deberías darle una oportunidad al marco QuickLook. En mi caso, busqué en todas partes cómo personalizar UIDocumentInteractionController y no encontré nada útil. Logré lo que quería (en mi caso, tener una vista previa de "vista" dentro de otra vista) usando QuickLook. Aquí hay un código de muestra, para tener un QLPreviewController como controlador secundario (poder crear el controlador principal libremente, lo que hará el truco en su caso).
self.previewController = [[QLPreviewController alloc]init];
self.previewController.delegate=self;
self.previewController.dataSource=self;
[self addChildViewController:self.previewController];
self.previewController.view.frame = CGRectMake(0, 0, self.previewView.frame.size.width, self.previewView.frame.size.height);
[self.previewView addSubview:self.previewController.view];
[self.previewController didMoveToParentViewController:self];
También necesitará algunos delegados: QLPreviewControllerDataSource y QLPreviewControllerDelegate
y también alguna necesidad de implementar:
- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
devuelve NSURL al recurso
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
Devuelve el número de elementos a previsualizar (en mi caso, 1)
Para mostrar el correo electrónico y las opciones de ''guardar en'' debe usar
- (BOOL)presentOptionsMenuFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated;
o
- (BOOL)presentOptionsMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
Como se describe en UIDocumentInteractionController.h:
/ Este es el método predeterminado al que debe llamar para darles a sus usuarios la opción de revisar rápidamente, abrir o copiar el documento. /
Durante el uso
// Presenta un menú que permite al usuario abrir el documento en otra aplicación.
- (BOOL)presentOpenInMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
o
- (BOOL)presentOpenInMenuFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated;
correo electrónico, sms y ''guardar en foto / video'' no se muestran.
Si se requieren otras acciones que no se reconocen, considere usar UIActionSheet.
Podría sugerir una UIActionSheet simple o mejor una ventana emergente si está en el iPad con una vista de tabla con aplicaciones y puede agregar manualmente Imprimir, correo electrónico y todo lo demás.