Проблема с управлением ScrollView от Popover - PullRequest
2 голосов
/ 12 ноября 2011

Я младший, и я действительно изо всех сил пытался заставить это работать, был бы действительно признателен за некоторую помощь.

Я пытаюсь создать приложение, в котором вы можете прокручивать различные веб-представления, выбирая элемент из таблицы во всплывающем окне (пока всплывающее окно остается на месте). К сожалению, я не могу заставить свой scrollView двигаться, когда я выбираю элемент из всплывающего окна.

Я установил UIScrollView с контролем страницы в главном UIViewController. 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 Информационная кнопка находится на панели навигации. ScrollView НЕ НЕДЕЙСТВИТЕЛЕН в 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 Ответ

1 голос
/ 13 ноября 2011

UIPopover, не являясь ни самым очевидным классом для использования в управлении памятью, ни самым стабильным, не требует, чтобы вы выпустили его, прежде чем представить его. Фактически, это приводит к фатальному исключению! Поповеры должны быть выпущены после их удаления с экрана и / или в -dealloc.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...