2011-11-12 48 views
2

我是一个大三,我一直在努力得到这个工作,真的很感谢一些帮助。控制从一个弹出窗口滚动视图的麻烦

我正在尝试构建一个应用程序,您可以通过从弹出窗口中的表中选择一个项目(而弹出窗口仍然保留)来滚动浏览不同的WebViews。不幸的是,当我从弹窗视图中选择一个项目时,我无法让我的scrollView移动。

我已经在主UIViewController中设置了带有页面控件的UIScrollView。 scrollView被填充(pageViewController)UIWebViews。主UIViewController有一个带有按钮的导航栏,点击按钮时会创建一个Popover View。当我从弹出视图中的表中选择一个项目时,我希望我的UIScrollView滚动到某个位置(等同于所选页面),但scrollView不会移动。

下面的方法采用从弹出窗口中选择的值,并使用页码来确定scrollView应该滚动到的位置,但它不起作用,因为此时我的scrollView为空。 如果需要,我可以提供更多的代码。

主要UIViewController.m代码:

- (void)setDetailItem:(id)newDetailItem { 


    if (detailItem != newDetailItem) { 
     [detailItem release]; 
     detailItem = [newDetailItem retain]; 


     NSString *pgnum = [[NSString alloc] initWithString:[detailItem description]]; 
     int pg; 

     if(pgnum == @"Page 1"){ 
      pg =1; 

     } 

     if(pgnum == @"Page 2"){ 

      pg =2; 
     } 

     if(pgnum == @"Page 3"){ 
      pg =3; 
     } 

     [pgnum release]; 

     pageControl.currentPage = pg; 
     [self loadScrollViewWithPage:pg - 1]; 
     [self loadScrollViewWithPage:pg]; 
     [self loadScrollViewWithPage:pg + 1]; 
     CGRect frame = scrollView.frame; 
     frame.origin.x = frame.size.width * pg; 
     frame.origin.y = 0; 
     [scrollView scrollRectToVisible:frame animated:YES]; 
     pageControlUsed = YES; 

    } 

    if (popoverController != nil) { 
     [popoverController dismissPopoverAnimated:YES]; 
    } 


} 

我这是怎么引发的popOverController 的infoButton是导航栏。 滚动视图是NOT NULL在infoButton

- (void)infoButton:(id)sender { 

NSLog(@"Entering: infoButton"); 

    // [self inspectView:self.view level:@""]; 

if (self.popoverController == nil) { 
PopoverViewController *popoverViewController = 
[[PopoverViewController alloc]  
initWithNibName:@"PopoverViewController" 
bundle:[NSBundle mainBundle]]; 

popoverViewController.navigationItem.title = @"Navigation"; 
UINavigationController *navController = 
[[UINavigationController alloc] 
initWithRootViewController:popoverViewController]; 

UIPopoverController *popover = 
[[UIPopoverController alloc] 
initWithContentViewController:navController]; 

popover.delegate = self; 
[popoverViewController release]; 
[navController release]; 

self.popoverController = popover; 
[popover release]; 

//NSLog(@"User pressed the info button"); 
} 

[self.popoverController presentPopoverFromBarButtonItem:sender permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; } 

回答

1

UIPopover,既不是最明显的类明智的使用内存管理,也不是最稳定的,不需要你,你目前它之前将其释放。事实上,这样做会导致它发生致命的异常!从屏幕中删除后,或者在-dealloc之后,Popovers应该被释放。

+0

谢谢你的帮助。我已经删除了[popover release],但这似乎不能解决问题。我的问题是,从弹出窗口中选择页码后,scrollView不会滚动到水平位置(scrollView在调试器中显示为空)。 –

+0

你甚至可能不会实例化一个scrollView,或者像你可能在你开始调用它滚动之前释放它的popover。使用scrollview的-contentOffset属性来设置它,并返回你的方法来检查[[scrollview alloc] init ...]和[scrollview release]; – CodaFi

+0

再次感谢您的帮助。我删除了所有版本,但我仍然遇到同样的问题。所以相反,我尝试了不同的方法。我已经从弹出窗口中删除了表格,并用按钮替换。这工作。 scrollView移动到与按钮相关的位置。我猜桌子和卷轴有些是如何引起问题的。再次感谢您的支持。 –