UIDocumentInteractionController добавление пользовательских действий в меню (например, электронная почта, сохранение фотографий)
Я начал использовать UIDocumentInteractionController для нового приложения, но мне интересно, как добавить дополнительные действия в меню действий, которое вы получаете на экране предварительного просмотра?
Кажется, что в меню перечислены только приложения, зарегистрированные для данного типа URL, и я вижу, что PRINT отображается на iOS4.2. Я хотел бы добавить отправку по электронной почте и сохранить фотографии, но не вижу способа расширения этого меню. Я могу закодировать действия, которые я хочу OK, просто добавив их в меню, которое кажется невозможным?
Я пропустил что-то очевидное?
Ответы
Ответ 1
Вы правы,
Это методы
- (BOOL) documentInteractionController: (UIDocumentInteractionController *) controller performAction: (SEL) action
- (BOOL) documentInteractionController: (UIDocumentInteractionController *) controller canPerformAction: (SEL) action
Поддерживаемые селектора действий для этих методов: копировать: и печать:.
Ответ 2
Чтобы отображать сообщения электронной почты и опции "сохранить", вы должны использовать
- (BOOL)presentOptionsMenuFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated;
или
- (BOOL)presentOptionsMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
Как описано в UIDocumentInteractionController.h:
/Это метод по умолчанию, который вы должны позвонить, чтобы дать вашим пользователям возможность быстро просматривать, открывать или копировать документ. /
При использовании
//Представляет меню, позволяющее пользователю открыть документ в другом приложении.
- (BOOL)presentOpenInMenuFromBarButtonItem:(UIBarButtonItem *)item animated:(BOOL)animated;
или
- (BOOL)presentOpenInMenuFromRect:(CGRect)rect inView:(UIView *)view animated:(BOOL)animated;
электронная почта, смс и "сохранить фото/видео" не отображаются.
Если требуются другие действия, которые не распознаются, рассмотрите возможность использования UIActionSheet.
Ответ 3
Я не могу комментировать, поэтому я отвечаю вместо этого: -)
Вы должны попробовать QuickLook. В моем случае я искал все, как настроить UIDocumentInteractionController и не нашел ничего полезного. Я достиг того, что хотел (в моем случае, с предварительным просмотром "просмотра" внутри другого представления) с помощью QuickLook. Вот пример кода, чтобы иметь QLPreviewController в качестве дочернего контроллера (возможность свободно создавать родительский контроллер, который будет делать трюк в вашем случае).
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];
Вам также понадобятся некоторые делегаты: QLPreviewControllerDataSource и QLPreviewControllerDelegate
а также некоторые из них необходимо реализовать:
- (id <QLPreviewItem>)previewController: (QLPreviewController *)controller previewItemAtIndex:(NSInteger)index
вернуть NSURL ресурсу
- (NSInteger) numberOfPreviewItemsInPreviewController: (QLPreviewController *) controller
вернуть количество элементов для предварительного просмотра (в моем случае, 1)
Ответ 4
Я мог бы предложить простой UIActionSheet или лучше popover, если вы на iPad со встроенным табличным представлением с приложениями, и вы можете вручную добавить Print, email и все остальное.