首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UIPrintInteractionController presentFromRect问题

UIPrintInteractionController presentFromRect问题
EN

Stack Overflow用户
提问于 2011-11-06 05:26:34
回答 1查看 4.8K关注 0票数 1

我使用AirPrint方法显示了UIButton中的presentFromRect选项,一切都如出一辙,但是如果我继续按下按钮足够快的速度,我的应用程序就会崩溃,这可能是因为弹出程序没有发布。

在启用ARC的情况下,我使用Xcode 4.2。

任何帮助都会很好!

更新2:问题仅发生在iOS 5模拟器上,iPad 4.3模拟器按预期工作。

更新:

真正的问题是:

*终止应用程序由于非正常的异常'NSGenericException',原因:'-UIPopoverController dealloc到达时,波普仍然是可见的‘。

以下是代码:

这里我称之为我的方法:

代码语言:javascript
复制
PrintUtils* printUtils = [[PrintUtils alloc] init];
printUtils.delegate = self;
[printUtils setHeader:@"Header"];
[printUtils print:self.webView fromRect:self.myButton.frame inView:self.menuView];

我的方法:

代码语言:javascript
复制
- (void)print:(UIWebView *)webView fromRect:(CGRect)rect inView:(UIView *)view
{

    printController = [UIPrintInteractionController sharedPrintController];
    [printController setDelegate:self];


    if(!printController){

        NSError* error = [[NSError alloc] initWithDomain:@"Print unavailable!" code:0 userInfo:nil];

        [self showError:error];
        return;
    }

    UIPrintInteractionCompletionHandler completionHandler = 
    ^(UIPrintInteractionController *printController, BOOL completed, NSError *error) {
        if(!completed && error){
            [self showError:error];
        }
    };

    UIPrintInfo* printInfo = [UIPrintInfo printInfo];
    [printInfo setJobName:header];
    [printInfo setDuplex:UIPrintInfoDuplexLongEdge];
    [printInfo setOutputType:UIPrintInfoOutputGeneral];

    UIPrintFormatter* viewFormatter = [webView viewPrintFormatter];

    CustomPrintPageRenderer *pageRenderer = [[CustomPrintPageRenderer alloc] init];    
    [pageRenderer setJobTitle:[printInfo jobName]];

    UIFont* font = [UIFont fontWithName:@"Helvetica" size:HEADER_FOOTER_TEXT_HEIGHT]; 
    CGSize titleSize = [pageRenderer.jobTitle sizeWithFont:font];
    pageRenderer.headerHeight = pageRenderer.footerHeight = titleSize.height + HEADER_FOOTER_MARGIN_PADDING;


    [pageRenderer addPrintFormatter:viewFormatter startingAtPageAtIndex:0];

    [printController setPrintPageRenderer:pageRenderer];
    [printController setPrintInfo:printInfo];    
    [printController setPrintFormatter:viewFormatter];
    [printController setShowsPageRange:YES];    
    [printController presentFromRect:rect inView:view animated:YES completionHandler:completionHandler];

}

我试图修复实现UIPrintInteractionControllerDelegate方法的问题:

代码语言:javascript
复制
- (void)printInteractionControllerWillPresentPrinterOptions:(UIPrintInteractionController *)printInteractionController
{

    if (visible) {
        [printController dismissAnimated:YES];
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-02-28 08:18:45

你想过这事吗?问题是你没有检查这个设备是iPad还是iPhone。iPhone不支持presentFromRect,但iPad支持。这就是为什么当您在iPhone上运行它时,您获得了错误的访问权限。

下面是你需要做的事情:

代码语言:javascript
复制
if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) {

    [printController presentFromFromBarButtonItem:sender animated:YES completionHandler:completionHandler];

} else {

    [printController presentAnimated:YES completionHandler:completionHandler];

}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8025399

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档