2011-10-21 128 views
0

我有一个小应用程序与一些细节控制器。详细控制器是把滚动视图内的Web视图: 下面是详细视图控制器的代码:滚动视图中的Iphone Web视图

- (void)loadScrollViewWithPage:(int)page 

{

if (page < 0) 
    return; 
if (page >= detailTotalJobs) 
    return; 

// replace the placeholder if necessary 
SearchJobDetailWebViewController *controller = [viewControllers objectAtIndex:page]; 
if ((NSNull *)controller == [NSNull null]) 
{ 



    NSLog(@"Vytvaram web controller: %d", page + 1); 

    if (detailJobIndex == page) { 

     controller = [[SearchJobDetailWebViewController alloc] initWithNibName:@"SearchJobDetailWebViewController" bundle:nil page:page url:detailExportUrl]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 

    } else if (detailJobIndex + 1 == page) { 

     controller = [[SearchJobDetailWebViewController alloc] initWithNibName:@"SearchJobDetailWebViewController" bundle:nil page:page url:detailNextExportUrl]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 

    } else { 

     [self performSelector:@selector(downloadData:) withObject:[NSNumber numberWithInt:page] afterDelay:0.1]; 
     //[self downloadData:[NSNumber numberWithInt:page]]; 

     controller = [[SearchJobDetailWebViewController alloc] initWithNibName:@"SearchJobDetailWebViewController" bundle:nil page:page url:nextArray.exportUrl]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 

    } 

} 

// add the controller's view to the scroll view 
if (controller.view.superview == nil) 
{ 

    CGRect frame = scrollView.frame; 
    frame.origin.x = frame.size.width * page; 
    frame.origin.y = 0; 
    controller.view.frame = frame; 
    [scrollView addSubview:controller.view]; 

    //NSDictionary *numberItem = [self.contentList objectAtIndex:page]; 
    //controller.numberImage.image = [UIImage imageNamed:[numberItem valueForKey:ImageKey]]; 
    //controller.myLabel.text = @"Test"; 
} 

}

- (void)scrollViewDidScroll:(UIScrollView *)sender 

{// 我们不不需要UIPageControl和滚动代理之间的“反馈循环” //其中滚动事件是从用户点击页面控制触发从 //委托方法更新。当使用页面控件时,我们使用布尔值来禁用委托逻辑。 if(pageControlUsed) //不执行任何操作 - 滚动是从页面控件启动的,而不是用户拖动 返回; }

// Switch the indicator when more than 50% of the previous/next page is visible 
CGFloat pageWidth = scrollView.frame.size.width; 
int page = floor((scrollView.contentOffset.x - pageWidth/2)/pageWidth) + 1; 
pageControl.currentPage = page; 

NSString *detailTitleText = [NSString stringWithFormat:@"%d/%d", page + 1, detailTotalJobs]; 
[self setTitle:detailTitleText]; 
//[detailTitleText release]; 

// load the visible page and the page on either side of it (to avoid flashes when the user starts scrolling) 
[self loadScrollViewWithPage:page - 1]; 
[self loadScrollViewWithPage:page]; 
[self loadScrollViewWithPage:page + 1]; 

// A possible optimization would be to unload the views+controllers which are no longer visible 

}

代码由苹果页面控制的启发。

问题是在这里:

if (detailJobIndex == page) { 

     controller = [[SearchJobDetailWebViewController alloc] initWithNibName:@"SearchJobDetailWebViewController" bundle:nil page:page url:detailExportUrl]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 

    } else if (detailJobIndex + 1 == page) { 

     controller = [[SearchJobDetailWebViewController alloc] initWithNibName:@"SearchJobDetailWebViewController" bundle:nil page:page url:detailNextExportUrl]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 

    } else { 

     [self performSelector:@selector(downloadData:) withObject:[NSNumber numberWithInt:page] afterDelay:0.1]; 
     //[self downloadData:[NSNumber numberWithInt:page]]; 

     controller = [[SearchJobDetailWebViewController alloc] initWithNibName:@"SearchJobDetailWebViewController" bundle:nil page:page url:nextArray.exportUrl]; 
     [viewControllers replaceObjectAtIndex:page withObject:controller]; 
     [controller release]; 

    } 

第一部分,如果工作的第二部分正确,因为我对第一个网页视图和第二Web视图的数据。

但是,如果有问题的最后一部分。当我从第二个Web视图滚动到第三个Web视图时,滚动视图显示空白页面。下一页正常工作。 问题在哪里?

+0

如果我的答案有帮助,您可以接受答案/ upvote吗? – Oliver

回答

0

只需在调试模式中的大括号中放置一个断点。
控制器是否为零? 检查您的自定义init方法。

如果出现问题,是否返回零?

[self = super initWithNibName..................]; 
if (!self) return nil; 

// some inits 

return self; 

如果这样做并且控制器为零,请检查您的URL并将其试用到Web浏览器中。它显示吗?

你如何填写你的webView?填充时是否返回错误?没有编码问题返回?

那么,一些代码将有所帮助,但这些迹象是最常见的问题,你可以有。

+0

首先我调用这个方法:[self performSelector:@selector(downloadData :) withObject:[NSNumber numberWithInt:page] afterDelay:0.1];为下载数据然后我创建网络视图控制器。问题是当我登录这两个方法:第一个日志是创建Web视图控制器,然后调用下载数据方法(控制器获取url为空),但为什么... – mysho

+0

我需要下载下一个数据在后台...当用户从第一个应用程序滚动到第二个应用程序时,必须在后台下载下一页(这里是问题),因为第三页是空的,第三页的数据在法庭上时,用户启动应用程序下载前两个网页页...下一页正常工作... – mysho

+0

你为什么推迟电话。这可能是你问题的原因。你为什么不叫这个方法?控制器在数据加载之前创建。 0.1秒,这在计算时间上是巨大的。 DownloadData被称为异步,所以你的控制器被创建之前,下载被称为 – Oliver