代码之家  ›  专栏  ›  技术社区  ›  vodkhang

如何使用uiTableView进行垂直分页?

  •  3
  • vodkhang  · 技术社区  · 15 年前

    让我描述一下我正在尝试的情况:

    我有一个物品清单。当我进入itemDetailView时,它是一个UITableView。我想在这里进行分页,比如:当我向下滚动出表视图时,我想显示下一个项目。就像好读者:

    Paging examples http://img245.yfrog.com/img245/2073/pricethat.jpg 目前,我正在尝试两种方法,但这两种方法都不适用于我。 第一:我让我的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;
    }
    

    我的第二种方法是:使用NavigationController的pop和push来弹出当前的itemDetail,并在上面推一个新的itemDetail。但是这种方法不会给我一个像第一种方法那样向下滚动的动画效果。

    因此,对于我如何用任何一种方法来完成这项工作的答案将是非常感谢的。

    1 回复  |  直到 15 年前
        1
  •  1
  •   cem    15 年前

    如果不使用任何uiTableView功能(滚动除外),只需将自定义视图添加到uiScrollView__,并启用页面滚动。