UIPageViewControlerDataSource 和 UiWebView 用于在页面上显示
Posted
技术标签:
【中文标题】UIPageViewControlerDataSource 和 UiWebView 用于在页面上显示【英文标题】:UIPageViewControlerDataSource and UiWebView for displaying on pages 【发布时间】:2013-02-02 11:30:47 【问题描述】:我想开发一个 ePub 阅读器应用程序,使用 UIPageViewController
和 UIWebView
来显示书页。所以我可以通过使用 javascript 字符串执行偏移来制作不同章节的页面。
问题是我如何以正确的方式实现UIPageViewControlerDataSource delegate
?当我准备一些显示页面时,我应该使用UIWebView
方法和UIWebView delegate
方法,它们仅在webView
出现在屏幕上时才有效。
我试图在pageViewController
下制作底层webView
以使微积分与ePub 章节分页链接,但我无法在页面上拖动加载的内容。
有人知道它是如何在 iBooks 或相同的应用程序中实现的吗?
【问题讨论】:
【参考方案1】:一个简单的解决方案可能是:
子类UIPageViewController
,使其符合UIPageViewControllerDataSource
和UIWebViewDelegate
协议,并在-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 用于在页面上显示的主要内容,如果未能解决你的问题,请参考以下文章