【问题标题】:Navigate to prev and next pdf file?导航到上一个和下一个 pdf 文件?
【发布时间】:2010-05-25 11:48:55
【问题描述】:

我从 Daniel Barry http://github.com/danberry/PDF-Viewer 获得了一个 uiwebview 中的 pdf 查看器,它工作得非常好,它显示了一个可以上下滚动的 pdf 文档。

现在我想一次只显示一个页面,并且在 pdf 页面下方还有一个菜单,带有上一个和下一个按钮。任何人都可以帮助新手弄清楚如何? 谢谢!

#import "PDFViewController.h"   // PDF View Controller

@implementation PDFViewController

// Synthesize UI Element properties
@synthesize webView;
// Synthesize Variable properties
@synthesize pdfURL;

#pragma mark -
#pragma mark UIViewController methods
- (void)viewDidLoad {
    [super viewDidLoad];

    pdfURL = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"stuff pdf" ofType:@"pdf"]];
    [webView loadRequest:[NSURLRequest requestWithURL:pdfURL]];
    webView.transform = CGAffineTransformScale( webView.transform, 1.00, 1.00 );
}

#pragma mark -
#pragma mark Memory Management
- (void)dealloc {
    [webView release];

    [pdfURL release];

    [super dealloc];
}

@end

【问题讨论】:

    标签: iphone pdf uiwebview


    【解决方案1】:

    我认为 webview 应该使用默认请求来显示 PDF,不需要新的实现?

    无论如何...您可以通过两种方法查看并链接到您的上一个和下一个按钮

    - (void)goBack:(id)sender 
    {
     if ([webView canGoBack]) {
      [webView goBack];
     }
    }
    
    - (void)goForward:(id)sender
    {
     if ([webView canGoForward]) {
      [webView goForward];
     }
    }
    

    这里是 UIWebView 的文档,其中详细解释了方法:http://developer.apple.com/iphone/library/documentation/uikit/reference/UIWebView_Class/Reference/Reference.html

    编辑:哦,我想,我首先误解了你的问题......

    只需创建要加载的 PDF URL 的 Array。创建一个计数器变量,它将保存当前打开的 PDF 的索引值。

    最后与上面的方法类似,创建一个前进和后退方法,并将它们链接到上一个和下一个按钮。在这些方法中,您将计数器递增或递减 1 并从数组 [array objectAtIndex:counter] 加载适当的索引,以便打开下一个或上一个 PDF。

    如果您需要更多帮助,请告诉我...

    【讨论】:

    • 谢谢你的最后一行 :-) 因为我现在只有一个 pdf 文件,里面有几页,我现在有的是在 uiwebview 中加载 pdf 文件,我有制作了上一个和下一个按钮,以及一个显示章节菜单的索引按钮(我希望)。如果你能帮助我解决这个问题,我会很高兴,谢谢。
    • 好的,我明白了!对不起,我的母语不是英语;)很好地在我认为不可能的不同页面之间导航。因为你不能像 UIScrollView 那样使用 UIWebView,例如你可以读出内容的位置。我想,你只需要坚持使用 webview 就可以了。或者,您可以将 PDF 分成多个 PDF(每页一页)并按上述方式加载。
    • 好的,我将pdf分成几个pdf。我希望能够从我的服务器加载 pdf,这可能还是我必须从一开始就包含它?接下来是什么?阵?应该在 viewController.m 文件中吗?
    • 你可以从服务器加载它,没问题。 webview 甚至会为你处理加载。它应该进入 viewController.m 可能,我不知道你的类是如何布局的。显示一些代码...
    • 在您的问题中将其作为编辑。在那里你可以使用代码功能
    【解决方案2】:

    好的,我会把这个作为另一个答案发布......

    在头文件中添加

    NSArray *arrURLs;
    NSInteger *currentIndex;
    

    并使数组成为一个属性(保留),在.m文件中合成它,在dealloc中释放它。

    - (void)viewDidLoad 中初始化包含所有 URL 的数组并将 currentIndex 设置为 0。

    arrUrls = [[NSArray alloc] initWithObjects:@"url", @"url", ..., nil];
    currentIndex = 0;
    

    添加两个您称之为 prevPagenextPage 的方法,并将它们链接到您的按钮。在这些方法中,您可以执行类似...

    // next page
    currentIndex += 1;
    NSString *str = [arrUrls objectAtIndex:currentIndex];
    NSURL *url = [NSURL URLWithString:str];
    [webView loadRequest:[NSURLRequest requestWithURL:url]];
    

    我可能会创建另一种方法来设置 currentIndex 并检查它是否在正确的范围内(例如,不应小于 0 并且必须小于数组的长度)。比您可以更改第一行并让方法调用处理变量的输入/减量。

    希望这会有所帮助。

    【讨论】:

    • 如果这回答了您的问题,请选择它作为答案。谢谢
    • 嗨 jd291 我还有其他事情要做。我是新手,并不太了解这一切,很抱歉,但我正在学习。有了数组——如果我有 100 个 pdf 文件来显示它会很长 :-) 有了头文件——我猜你的意思是 ViewController.m 文件?我在 ViewController.m 文件的顶部添加了:@synthesize NSArray *arrURLs; @synthesize NSInteger *currentIndex;并像这样在 dellock 中发布它: [NSArray release]; [NSInteger 发布];我把数组和按钮的两个方法-(void)goBack:(id)sender...放在-(void)viewDidLoad中,是这样吗?
    • 我明白了。你只是从一切开始。我认为最好的办法是你压缩你的项目上传它,发布链接,然后我把正确的版本发回给你;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多