2012-08-27 7 views
3

Я работаю в универсальном приложении, поддерживающем 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; 
    } 
} 

Как всегда, любая помощь очень ценится.

ответ

0

Я собираюсь по существу отметить это как разрешенное, так как это не приводит к тому, что приложение или контроллер не работают. В конце концов, я считаю, что мне придется просто заменить все это своим собственным рулоном контроллера, поскольку он не очень дружелюбен к брендингу/скинированию. Было бы очень приятно, если бы он предлагал возможность присутствовать на панели вкладок.

Одна вещь, которую я заметил, - это когда вы представляете ее в навигационных контроллерах в пределах табуляции, определенной в Interface Builder, контроллер doc выдаст такое же предупреждение, но просто не появится. Создание панели инструментов программным образом и явное определение RectangleF позволит контроллеру отобразиться, но все же выдаст предупреждение.

Мое лучшее предположение - PresentPreview (true) предполагает, что он должен присутствовать в элементе управления, который называется событием, которое, к сожалению, является кнопкой в ​​листе действий, представленном правой кнопкой. Я открыт для любых предложений, чтобы заставить предупреждение исчезнуть.

Смежные вопросы