1

我在做一件事时遇到了一些问题,我正在制作一个应用程序,并且我有一个显示 pdf 文件的 webview,如果单击,我有一个按钮将调用 UIDocumentInteractionController(在新窗口中打开 pdf)。

我将留下屏幕截图以使其更容易:

当我打开应用程序时:

http://imgur.com/dpIEd

打开 UIDocumentInteractionController 后:

http://imgur.com/VYV2N

这里也是代码

.h 文件

@interface pdfView : UIViewController <UIDocumentInteractionControllerDelegate>
{
    IBOutlet UIActivityIndicatorView *loading;
    IBOutlet UIWebView *Wview;
    UIDocumentInteractionController *controller;
}

@property (nonatomic, retain) IBOutlet UIActivityIndicatorView *loading;

@property (nonatomic, retain) IBOutlet UIWebView *Wview;

@property (nonatomic, retain) UIDocumentInteractionController *controller;

-(void)buttonPressed;
-(IBAction)open_in:(id)sender;
-(IBAction)back:(id)sender;

@end

.m 文件

#import "pdfView.h"


@implementation pdfView

@synthesize loading,Wview;
@synthesize controller;

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return YES;
}

- (void)viewDidLoad
{
    [loading startAnimating];

    [super viewDidLoad];

    Wview.scalesPageToFit = TRUE;
    Wview.multipleTouchEnabled = TRUE;
    [Wview setOpaque:NO];

    NSString *path = [[NSBundle mainBundle] pathForResource:@"guia_seguranca_2" ofType:@"pdf"];
    NSURL *targetURL = [NSURL fileURLWithPath:path];
    NSURLRequest *request = [NSURLRequest requestWithURL:targetURL];
    [Wview loadRequest:request];

    [loading stopAnimating];
}

-(IBAction)open_in:(id)sender
{
    NSString *fileToOpen = [[NSBundle mainBundle] pathForResource:@"guia_seguranca_2" ofType:@"pdf"];
    UIDocumentInteractionController* preview = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:fileToOpen]];
    preview.delegate = self;
    [preview presentPreviewAnimated:YES];
    [preview retain]; 
}

-(IBAction)back:(id)sender
{
    [self.view removeFromSuperview]; 
}

-(void)buttonPressed
{
    //[self.view removeFromSuperview];

    NSString *fileToOpen = [[NSBundle mainBundle] pathForResource:@"guia_seguranca_2" ofType:@"pdf"];
    UIDocumentInteractionController* preview = [UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:fileToOpen]];
    preview.delegate = self;
    [preview presentPreviewAnimated:YES];
    [preview retain]; 
 }

- (UIViewController *)documentInteractionControllerViewControllerForPreview:(UIDocumentInteractionController *)controller
{
    return self;
}

- (UIView *)documentInteractionControllerViewForPreview:(UIDocumentInteractionController *)controller
{
    return self.view;
}

- (CGRect)documentInteractionControllerRectForPreview:(UIDocumentInteractionController *)controller
{
    return self.view.frame;
}

- (void)documentInteractionControllerDidEndPreview:(UIDocumentInteractionController *)controller
{
    [self.controller autorelease];
}

- (void)didReceiveMemoryWarning
{
    // Releases the view if it doesn't have a superview.
    [super didReceiveMemoryWarning];

    // Release any cached data, images, etc. that aren't in use.
}

- (void)viewDidUnload
{
    [super viewDidUnload];
    // Release any retained subviews of the main view.
    // e.g. self.myOutlet = nil;
}

- (void)dealloc
{
    [super dealloc];
    [Wview release];
    [loading release];
}

@end

提前致谢.....

4

2 回答 2

1

我建议不要使用 webview 并使用像这样的 pdf 应用程序(ibook、cloudreader)。

//name of pdf
NSString * pathString = @"userguide";
//get pdf path
NSString * filePath = [[NSBundle mainBundle] pathForResource:pathString ofType:@"pdf"];

NSURL *url = [NSURL fileURLWithPath:filePath];
self.docController = [UIDocumentInteractionController interactionControllerWithURL:url];

BOOL isValid = [self.docController presentOpenInMenuFromRect:self.handBookLaunch.frame inView:self.view  animated:YES];

if (!isValid) {
    NSString * messageString = [NSString stringWithFormat:@"No PDF reader was found on your device. Please download a PDF reader (eg. iBooks)."];

    UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Error" message:messageString delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
    [alertView show];
于 2012-06-06T13:16:01.803 回答
0

已解决,添加此代码用于布局验证:

-(void) viewWillAppear:(BOOL)animated
    {
    CGRect arect=[[UIScreen mainScreen]applicationFrame];

    CGRect anotherrect=[[UIApplication sharedApplication]statusBarFrame];

    if(self.view.center.y==arect.size.height/2)

    self.view.center=CGPointMake(self.view.center.x, self.view.center.y+anotherrect.size.height); // fix silliness in IB that makes view start 20 pixels higher than it should on iPhone
    }

来源:https ://discussions.apple.com/thread/2658315?start=0&tstart=0

于 2012-06-11T11:00:15.397 回答