从Popover控制ScrollView的麻烦

时间:2011-11-12 18:14:17

标签: ios ipad

我是一名大三学生,我一直在努力让这个工作起来,真的很感激一些帮助。

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

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

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

主要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位于导航栏上。 infoButton

中的scrollView为NOT NULL
- (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 个答案:

答案 0 :(得分:1)

UIPopover,既不是最明显使用内存管理的类,也不是最稳定的类,不需要在呈现之前释放它。事实上,这样做会导致它致命的例外!弹出窗口应在从屏幕上移除后和/或-dealloc中释放。