Как я могу сделать вертикальный пейджинг с UITableView? - PullRequest
3 голосов
/ 18 мая 2010

Позвольте мне описать ситуацию, которую я пытаюсь сделать:

У меня есть список предметов. Когда я иду в ItemDetailView, который является UITableView. Я хочу сделать пейджинг здесь следующим образом: Когда я прокручиваю вниз из табличного представления, я хочу отобразить следующий элемент. Как в Good Reader:

Примеры подкачки http://img245.yfrog.com/img245/2073/pricethat.jpg В настоящее время я пробую 2 подхода, но оба они на самом деле не работают для меня. 1-й: я предоставляю свой UITableView поверх моего вида прокрутки, и у меня есть хорошая анимация, и она работает вполне нормально, за исключением того, что иногда UITableView будет получать событие вместо моего вида прокрутки. И поскольку UITableView уже является UITableView, такой подход кажется не очень хорошей идеей. Вот некоторый код:

- (void)applicationDidFinishLaunching:(UIApplication *)application {
    // a page is the width of the scroll view
    scrollView.pagingEnabled = YES;
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width,   scrollView.frame.size.height * kNumberOfPages);

    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = YES;
    scrollView.scrollsToTop = NO;
    scrollView.delegate = self;
    [self loadScrollViewWithPage:0];
}

- (void)loadScrollViewWithPage:(int)page {
    if (page < 0) return;
    if (page >= kNumberOfPages) return;

 [self.currentViewController.view removeFromSuperview];
 self.currentViewController = [[[MyNewTableView alloc]initWithPageNumber:page] autorelease];

    if (nil == currentViewController.view.superview) {
        CGRect frame = scrollView.frame;
        [scrollView addSubview:currentViewController.view];
    }
}

- (void)scrollViewDidScroll:(UIScrollView *)sender {
    if (pageControlUsed) {
        return;
    }

    CGFloat pageHeight = scrollView.frame.size.height;
    int page = floor((scrollView.contentOffset.y - pageHeight / 2) / pageHeight) + 1;
    [self loadScrollViewWithPage:page];
}
- (IBAction)changePage:(id)sender {
    int page = pageControl.currentPage;
    [self loadScrollViewWithPage:page];

 // update the scroll view to the appropriate page
    CGRect frame = scrollView.frame;
    [scrollView scrollRectToVisible:frame animated:YES];

    pageControlUsed = YES;
}

Мой второй подход: использование pop и push-навигации navigationController для выталкивания текущего ItemDetail и добавления нового поверх него. Но этот подход не даст мне приятной анимации прокрутки вниз, как при первом подходе.

Итак, ответ на вопрос, как я могу это сделать при любом подходе, будет оценен

1 Ответ

1 голос
/ 18 мая 2010

Если вы не используете какие-либо функции UITableView (кроме прокрутки), вы можете просто добавить пользовательские представления в UIScrollView… и включить прокрутку страницы.

...