UIPageViewControlerDataSource 和 UiWebView 用于在页面上显示

Posted

技术标签:

【中文标题】UIPageViewControlerDataSource 和 UiWebView 用于在页面上显示【英文标题】:UIPageViewControlerDataSource and UiWebView for displaying on pages 【发布时间】:2013-02-02 11:30:47 【问题描述】:

我想开发一个 ePub 阅读器应用程序,使用 UIPageViewControllerUIWebView 来显示书页。所以我可以通过使用 javascript 字符串执行偏移来制作不同章节的页面。

问题是我如何以正确的方式实现UIPageViewControlerDataSource delegate?当我准备一些显示页面时,我应该使用UIWebView 方法和UIWebView delegate 方法,它们仅在webView 出现在屏幕上时才有效。 我试图在pageViewController 下制作底层webView 以使微积分与ePub 章节分页链接,但我无法在页面上拖动加载的内容。

有人知道它是如何在 iBooks 或相同的应用程序中实现的吗?

【问题讨论】:

【参考方案1】:

一个简单的解决方案可能是:

子类UIPageViewController,使其符合UIPageViewControllerDataSourceUIWebViewDelegate协议,并在-viewDidLoad覆盖中将self设置为数据源

实现pageViewController:viewControllerAfterViewController:pageViewController:viewControllerBeforeViewController:(UIPageViewControllerDataSource 协议方法),以便它们返回一个新的UIViewController,其中包含一个显示您的数据的UIWebView

- (UIViewController *)pageViewController:(UIPageViewController *)pageViewController viewControllerAfterViewController:(UIViewController *)viewController

    UIViewController *vc = [[UIViewController alloc] init];
    UIWebView *webview = [[UIWebView alloc] init];
    webview.delegate = self;

    // Here you can call - (void)loadData:(NSData *)data MIMEType:(NSString *)MIMEType textEncodingName:(NSString *)encodingName baseURL:(NSURL *)baseURL
    // to load your web page as you need

    vc.view = webview;

    return vc;

当然你必须完成代码存根。您应该设置一种机制来区分 viewControllers 以便能够返回下一页和上一页(即,我使用 UIPageViewController 子类声明pageNumber 属性,但我相信有更优雅的方法可以做到这一点.. )

【讨论】:

但是 Apple 的 UIPageViewController 类参考中的这一行呢:“这个类不打算被子类化。” ? 对不起,我的意思是“UIViewController 子类”,而不是 UIPageViewController(现在在答案中更正了)。无论如何,您在 ios 6 文档中引用的那句话已经变成:This class is generally used as-is but may be subclassed in iOS 6 and later. - a softer policy.. 更一般地说,据我了解,这通常意味着不应该尝试更改控制器的默认行为在子类中。 啊,不,对不起,我真的是想继承 UIPageViewController :) 所以,前面评论的其余部分应该回答你的疑问 感谢您的回答,我将尝试实施此解决方案。似乎是合法的 =)

以上是关于UIPageViewControlerDataSource 和 UiWebView 用于在页面上显示的主要内容,如果未能解决你的问题,请参考以下文章