Как реализовать ScrollView в TableViewCell - PullRequest
0 голосов
/ 23 июля 2011

Привет, ребята, я пытаюсь реализовать прокрутку с управлением страницей, как домашний экран 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

это представление таблицы с горизонтальной прокруткойна каждую клетку.

Спасибо.

1 Ответ

0 голосов
/ 24 июля 2011

Если есть другой подход / лучший подход, чем то, что я пытаюсь, дайте мне знать.Для наглядного представления о том, чего я пытаюсь достичь, я думаю, что приложение Pulse News отвечает всем требованиям.

Если основным ориентиром для разработки этого приложения является приложение Pulse, вы должны знать, что разработчики на самом деле НЕ прибегали к прокрутке.Приложение Pulse - это все таблицы.Одно основное вертикальное табличное представление и несколько горизонтальных «взломанных» табличных представлений внутри каждой ячейки, составляющей вертикальную.

Это довольно умная реализация для табличного представления.Но кто лучше вам это объяснит, чем сами разработчики Pulse;они были приглашены на лекцию в Стэнфорд для своего курса по программированию для iOS. Это на iTunes U и в 6 минут на лекции под названием «10 хаков, чтобы перейти от идеи к приложению № 1». Вы должны посмотреть его и, возможно, переосмыслить дизайн своего приложения, если он вам больше подходит.

...