Intereting Posts
Серая разделительная линия поверх uitableviewcell Как извлечь ссылку из uitextview и загрузить изображение из ссылки, например facebook или twitter? Как сделать аудиоплеер еще раз? Почему мое приложение заполнено утечками памяти после перехода на ARC? UIView не получает события касания, но ниже Автоматическая компоновка инвертирует представления по горизонтали iOS Swift: Наследование xib-файлов Тип 'ViewController' не соответствует протоколу 'MDCSwipeToChooseDelegate' Запрос базы данных Sqlite на iOS обновляет только одно поле MPMoviePlayerController ipad stuck loading Сбой приложения iOS при выполнении следующего кода Изменение цвета изображения, встроенного в кнопку (Swift3) фондовый регистр VC и пароль подтверждения? Доступный? Внедрение анимации приложений IOS7 App Switcher для изменения представлений какао error 134100 снова (модель, используемая для открытия магазина, несовместима с той, которая используется для создания магазина)

Почему обновление моего UIPageControl не выполняется при прокрутке ScrollView?

Я пытаюсь сделать таблицу, чьи ячейки имеют UIPageControls с ScrollViews в них. Работа ScrollViews и PageControls есть, но PageControl не обновляется, когда прокрутка происходит, за исключением нижней ячейки. Вот мой код:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath: (NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"Cell"]; cell.selectionStyle = UITableViewCellSelectionStyleNone; cell.contentView.backgroundColor = [UIColor blueColor]; UIColor *color = [colorsArray objectAtIndex:indexPath.row]; scrollView = [[UIScrollView alloc] init]; [scrollView setDelegate:self]; CGRect screen = [[UIScreen mainScreen] bounds]; CGFloat width = CGRectGetWidth(screen); CGFloat height = tableView.rowHeight; scrollView.frame = CGRectMake(0, 0, width, height/1.25); scrollView.contentSize=CGSizeMake(width*3,height/1.25); scrollView.pagingEnabled = YES; [scrollView setBackgroundColor:color]; [scrollView setShowsHorizontalScrollIndicator:NO]; scrollView.clipsToBounds = YES; NSUInteger i; int xCoord=width/25; int yCoord=width/25; int buttonWidth=width/8; int buttonHeight=width/8; int buffer = width; for (i = 1; i <= 4; i++) { UIButton *aButton = [UIButton buttonWithType:UIButtonTypeRoundedRect]; aButton.backgroundColor = [UIColor blackColor]; aButton.frame = CGRectMake(xCoord, yCoord,buttonWidth,buttonHeight ); [aButton addTarget:self action:@selector(buttonClicked:) forControlEvents:UIControlEventTouchUpInside]; aButton.tag = i; UIImage *buttonImage = [picsArray objectAtIndex:indexPath.row]; [aButton setBackgroundImage:buttonImage forState:UIControlStateNormal]; [scrollView addSubview:aButton]; xCoord += buttonHeight + buffer; } [cell addSubview:scrollView]; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, height/1.25, width, height/4)]; pageControl.numberOfPages = 3; pageControl.currentPage = 0; pageControl.userInteractionEnabled =YES; [pageControl addTarget:self action:@selector(pageAction:) forControlEvents:UIControlEventValueChanged]; [cell addSubview:pageControl]; return cell; } - (void)scrollViewDidScroll:(UIScrollView *)sender { // Update the page when more than 50% of the previous/next page is visible CGFloat pageWidth = scrollView.frame.size.width; int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1; pageControl.currentPage = page; } - (void)pageAction:(UIPageControl *)sender { // update the scroll view to the appropriate page CGRect frame; frame.origin.x = scrollView.frame.size.width * pageControl.currentPage; frame.origin.y = 0; frame.size = scrollView.frame.size; [ scrollView scrollRectToVisible:frame animated:YES]; } 

Это потому, что у вас есть ссылка только на просмотр прокрутки и управление страницей, сгенерированные для последней ячейки:

  // this references are redefined every time new cell is generated scrollView = [[UIScrollView alloc] init]; pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, height/1.25, width, height/4)]; 

Вы можете попытаться использовать sender в вашем UIScrollView делегата UIScrollView :

 - (void)scrollViewDidScroll:(UIScrollView *)sender { // Update the page when more than 50% of the previous/next page is visible CGFloat pageWidth = sender.frame.size.width; int page = floor((sender.contentOffset.x - pageWidth / 2) / pageWidth) + 1; // !!! but here is another problem. You should find reference to appropriate pageControl pageControl.currentPage = page; } 

Но будет еще одна проблема: вы должны получить ссылку на соответствующий объект UIPageControl . Вы можете использовать теги, массивы или что-то еще для этой цели.