Я работаю в универсальном приложении, поддерживающем iPhone и iPad. В настоящее время я использую UIDocumentInteractionController для представления PDF-файла и предлагаю некоторые опции в этом PDF-файле (что наиболее важно для функции Print). Кажется, что все работает на iPad безупречно с кратким обзором и RightBarButtonItem в Preview, что позволяет мне печатать. Однако, работая с iPhone, когда я нажимаю RightBarButtonItem я получаю сообщение об ошибке:Monotouch: UIDocumentInteractionController Предварительный просмотр правой панели, не работает в iPhone
Presenting action sheet clipped by its superview. Some controls might not respond to touches. On iPhone try -[UIActionSheet showFromTabBar:] or -[UIActionSheet showFromToolbar:] instead of -[UIActionSheet showInView:].
Разрешающем это с типичными листами действий относительно прост:
ActionSheet.ShowFromTabBar(this.TabBarController.TabBar);
ActionSheet.ShowFromToolbar(this.NavigationController.ToolBar);
Однако с приготовленными в делопроизводителе, я «Мне трудно понять, как это сделать. Код для контроллера взаимодействия очень стандартен по сравнению с другими реализациями, которые я нашел здесь, поэтому я уверен, что есть что-то маленькое, которого я не вижу. Вот implmentation:
invoiceInteractionController = UIDocumentInteractionController.FromUrl(url);
invoiceInteractionController.Delegate = new UIDocumentInteractionControllerDelegateClass(this);
InvokeOnMainThread(delegate{
if (!DeviceHelper.IsIPhone())
invoiceInteractionController.PresentOptionsMenu(NavigationItem.RightBarButtonItem, true);
else {
invoiceInteractionController.PresentPreview(true);
}
});
На данный момент, если устройство iPhone я просто пропуск право предварительного просмотра, как вы можете видеть в этом коде. Проблема находится в контроллере предварительного просмотра, когда нажата кнопка с верхним правым штрихом, которая выбрасывает вышеупомянутую проблему. Однако, как и в сторону, замените PresentPreview() на:
invoiceInteractionController.PresentOptionsMenu(new RectangleF(320,320,0,500), this.NavigationController.Toolbar, true);
Это также вызывает ту же ошибку.
Я почти интересно, если это что-то делать с моим классом делегата, который выглядит следующим образом:
public class UIDocumentInteractionControllerDelegateClass : UIDocumentInteractionControllerDelegate
{
UIViewController viewC;
public UIDocumentInteractionControllerDelegateClass (UIViewController controller)
{
viewC = controller;
}
public override UIViewController ViewControllerForPreview (UIDocumentInteractionController controller)
{
return viewC;
}
public override UIView ViewForPreview (UIDocumentInteractionController controller)
{
return viewC.View;
}
public override RectangleF RectangleForPreview (UIDocumentInteractionController controller)
{
return viewC.View.Frame;
}
}
Как всегда, любая помощь очень ценится.