Intereting Posts
Как отменить segue программно и оставаться в одном представлении Ошибка интерфейса Builder? Высота панели вкладок на iPad показывает 49 вместо 56 Не будет подклассами модулей / фреймворков в Swift / iOS аварийный отключение keyValue observer (с использованием примера кода Apple SquareCam) Ярлыки или автозаполнение для контактной информации в UITextFields JSON Image Parsing IOS Swift 3.0 UITableView отстает от ячейки, содержащей UITextView, отображается в первый раз iOS – текущее расширение «показывать больше» и «показывать меньше» неверно. Collapsed говорит, что «показывать меньше» – требуется многопользовательская печать для исправления Не удается установить элемент панели в левой панели на панели навигации? Как эффективно получить все допустимые значения атрибута из объекта NSManagedObject? Сортировка массива против другого массива с заменой Как проверить, что пользовательские взгляды для вашего приложения часов animateWithDuration и UIViewAnimationOptionsAllowUserInteraction QuickBlox – вызов пользователя / создание сеанса из фона Как я могу применить CAGradient к нижней части рисунка?

Почему обновление моего 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 . Вы можете использовать теги, массивы или что-то еще для этой цели.