Pagesと同様にNavigationControllerにプリンタオプションを表示しようとしても同じ問題が発生しました。
重要なのは、UIPrintInteractionControllerDelegateのprintInteractionControllerParentViewControllerを実装して、NavigationControllerを返すことです。
このメソッドは、UIPrintInteractionControllerの現在のメソッドからのみ呼び出されます。
UIPrintInteractionControllerDelegateに関するAppleドキュメント
いくつかのサンプルコード:
// Just some code to return a UIPrintInteractionController
// Important to set delegate to self
- (UIPrintInteractionController *)printContent {
UIPrintInteractionController *pic = [UIPrintInteractionController sharedPrintController];
if (pic && [UIPrintInteractionController canPrintURL:[self fileToPrint]]) {
pic.delegate = self;
UIPrintInfo *printInfo = [UIPrintInfo printInfo];
printInfo.outputType = UIPrintInfoOutputGeneral;
printInfo.jobName = @"OutputFile";
printInfo.duplex = UIPrintInfoDuplexLongEdge;
pic.printInfo = printInfo;
pic.showsPageRange = YES;
pic.printingItem = self.fileToPrint;
}
return pic;
}
デリゲートのprintInteractionControllerParentViewControllerメソッドを実装します。
// Implement the delegate method simply to return navigationController
- (UIViewController *)printInteractionControllerParentViewController:(UIPrintInteractionController *)printInteractionController{
return self.navigationController;
}
デリゲートは、UIPrintInterfaceControllerのPresentメソッドを実行した場合にのみ呼び出されます(例:presentFromRect:)。
// Need to call a present method to invoke the delegate method
[[self printContent] presentFromRect:[self.view frame] inView:self.view animated:NO completionHandler:completionHandler];