UIPageViewController - 每个页面显示不同的 Webview

Posted

技术标签:

【中文标题】UIPageViewController - 每个页面显示不同的 Webview【英文标题】:UIPageViewController - each pages display a different Webview 【发布时间】:2011-12-27 15:06:13 【问题描述】:

我想知道如何在UIPageViewController 的每个页面上显示不同的 UIWebView 的 URL,假设第一个 pdf 是 one.pdf,第二个是 two.pdf 等等...

我在 Xcode 4.2 中使用 UIPageViewController

【问题讨论】:

techotopia.com/index.php/… 【参考方案1】:

最好的方法是创建一个自定义的 viewController 子类。

@interface WebViewController : UIViewController

- (id)initWithURL:(NSURL *)url frame:(CGRect)frame;

@property (retain) NSURL *url;

@end

在这个例子中,我调用了 WebViewController 类并给它一个自定义的初始化方法。 (也给它一个属性来保存 url)。

首先在你的实现中你应该综合该属性

@implementation WebViewController

@synthesize url = _url;

在实现中,你应该做这样的事情来创建你的 init 方法:

- (id)initWithURL:(NSURL *)url frame:(CGRect)frame 
    self = [super initWithFrame:frame];
    if (self) 
        self.url = url;
    
    return self;

记住您还需要(如果不使用 ARC):

- (void)dealloc 
    self.url = nil;
    [super dealloc];

那么你还需要一个:

- (void)loadView 
    UIWebView *webView = [[UIWebView alloc] initWithFrame:self.view.bounds];
    [self.view addSubview:webView];
    NSURLRequest *request = [NSURLRequest requestWithURL:self.url];
    [webView loadRequest:request];
    [webView release]; // remove this line if using ARC

    // EDIT :You could add buttons that will be on all the controllers (pages) here
    UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
    [button1 addTarget:self action:@selector(buttonTap) forControlEvents: UIControlEventTouchUpInside];
    [self.view addSubview:button1];

还请记住,您将需要实现该方法

- (void)buttonTap 
    // Do something when the button is tapped


// END EDIT

在具有 UIPageViewController 的主控制器中,您需要执行以下操作:

NSMutableArray *controllerArray = [NSMutableArray array];
for (NSUInteger i = 0; i < urlArray.count; i++) 
    WebViewController *webViewController = [[WebViewController alloc] initWithURL:[urlArray objectAtIndex:i]];
    [controllerArray addObject:webViewController];
// EDIT: If you wanted different button on each controller (page) then you could add then here
UIButton *button1 = [UIButton buttonWithType:UIButtonTypeRoundedRect];
[button1 addTarget:self action:@selector(buttonTap) forControlEvents: UIControlEventTouchUpInside];
[webViewController.view addSubview:button1];
// In this case you will need to put the "buttonTap" method on this controller NOT on the webViewController. So that you can handle the buttons differently from each controller.
// END EDIT

[webViewController release]; // remove this if using ARC

pageViewController.viewControllers = controllerArray;

所以我们基本上只是为您要显示的每个页面创建了一个 WebViewController 类的实例,然后将它们全部添加为 UIPageViewController 的 viewControllers 数组,以便在它们之间进行分页。

假设 urlArray 是一个有效的 NSArray,其中包含您要加载的所有页面的 NSURL 对象,并且您已经创建了一个 UIPageViewController 并将其添加到您的视图层次结构中,那么这应该可以解决问题。

希望这会有所帮助,如果您需要任何澄清或进一步帮助,请告诉我 :)

【讨论】:

如果你愿意,你能在这些视图上添加按钮吗? 当然,只需将它们添加到控制器中即可。如果您希望它们在每个控制器上都相同,则可以在控制器本身中。或者当您创建控制器时。即将更新答案以包含此内容。 已更新,在两个地方显示了添加按钮。您可能不需要在两者中都这样做。但是你可能会根据你需要按钮来做什么?

以上是关于UIPageViewController - 每个页面显示不同的 Webview的主要内容,如果未能解决你的问题,请参考以下文章

NavigationController中的UIPageViewController

释放 UIPageViewController 中未使用的页面

如何在 UIPageViewController 中重用相同的 ViewController?

以编程方式平滑滚动 UIPageViewController

UIPageViewController 具有未知数量的 UIViewController 实例

UIPageViewController 和 UISwipeGestureRecognizer