0

嘿伙计们,我正在尝试使用页面控件实现滚动,例如 iPhone 主屏幕,但在 uitableview 单元格中。

我尝试这样做是创建一个带有 xib 文件的自定义表格视图单元格,并将 uipagecontrol 和 uiscrollview 放在其上,并将其与 iboutlets 连接到 uitableviewcell。

这是自定义单元格的 .h 文件中的代码。

@interface ScrollableCell : UITableViewCell <UIScrollViewDelegate>

@property (nonatomic, strong) IBOutlet UIScrollView *scrollView;
@property (nonatomic, strong) IBOutlet UIPageControl *pageControl;
@property (nonatomic, strong) NSMutableArray *viewControllers; 

这是合成属性后自定义单元格的 .m 文件中的代码。

- (CGSize)contentSizeForPagingScrollView {
CGRect bounds = self.scrollView.bounds;
return CGSizeMake(bounds.size.width * [self.viewControllers count] , bounds.size.height );
} 

@- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    // Initialization code

    UIView *blueView = [[UIView alloc] initWithFrame:CGRectZero];
    [blueView setBackgroundColor:[UIColor blueColor]];

    UIView *redView = [[UIView alloc] initWithFrame:CGRectZero];
    [redView setBackgroundColor:[UIColor redColor]];

    UIView *yellowView = [[UIView alloc] initWithFrame:CGRectZero];
    [yellowView setBackgroundColor:[UIColor yellowColor]]; 

    self.viewControllers = [NSArray arrayWithObjects:blueView, redView, yellowView,nil];

    for (UIView *view in self.viewControllers) {
        [view setFrame:CGRectMake([self.viewControllers indexOfObject:view]*self.scrollView.frame.size.width+5, 
                                  5, 
                                  self.scrollView.frame.size.width-10, 
                                  self.scrollView.frame.size.height-10.0)];
        [self.scrollView addSubview:view];

    }

    self.pageControl.numberOfPages = [self.viewControllers count];
    self.pageControl.currentPage = 0;

    self.scrollView.pagingEnabled = YES;
    self.scrollView.backgroundColor = [UIColor blackColor];
    self.scrollView.showsVerticalScrollIndicator = NO;
    self.scrollView.showsHorizontalScrollIndicator = NO;
    self.scrollView.contentSize = [self contentSizeForPagingScrollView];
    self.scrollView.delegate = self;
    [self.contentView addSubview:self.scrollView];
    [self.contentView addSubview:self.pageControl];
}
return self;
}

-(void) scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
self.pageControl.currentPage = page;
}

希望你们能帮助我完成这项工作。如果我正在尝试有不同的方法/更好的方法,请告诉我。

对于我想要实现的目标的视觉参考,我认为脉冲新闻应用程序符合要求

http://itunes.apple.com/us/app/pulse-news-for-iphone/id377594176?mt=8

它是一个表格视图,每个单元格上都有水平滚动。

谢谢。

4

1 回答 1

0

如果我正在尝试有不同的方法/更好的方法,请告诉我。对于我想要实现的目标的视觉参考,我认为脉冲新闻应用程序符合要求。

如果您设计它的主要参考是 Pulse 应用程序,您应该知道开发人员实际上并没有求助于滚动视图。Pulse 应用程序都是表格视图。一个主要的垂直 tableview 和几个水平的“hacked” tableviews 在组成垂直的每个单元格内。

它是一个非常聪明的 tableview 实现。但是,有谁能比 Pulse 的开发者自己更好地向您解释这一点呢?他们被邀请参加斯坦福大学的 iOS 编程课程讲座。 它在 iTunes U 上,在名为 10 Hacks to Go From Idea To #1 App 的讲座中的 6 分钟。您应该观看它,如果它更适合您,您可能会重新考虑您的应用程序设计。

于 2011-07-24T00:38:15.393 回答