1

アプリを作成していて、pdfファイルを表示するWebビューがあり、ボタンをクリックすると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 に答える