2

2つの異なるページで設定された単純なページコントロールがあります。nextButtonというボタンがあり、ユーザーがそのボタンを押した場合は、ページを変更して次のページにスクロールします。

ページコントロールは機能し、スクロールしてページを変更できますが、ボタンがまったく機能しません。しかし、それは呼ばれています。

- (void)viewDidLoad
{
    [super viewDidLoad];

    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * TUTORIALNUMBEROFPAGES, self.scrollView.frame.size.height);
    self.scrollView.pagingEnabled = YES;
    self.scrollView.showsHorizontalScrollIndicator = NO;
    self.scrollView.showsVerticalScrollIndicator = NO;
    self.scrollView.scrollsToTop = NO;
    self.scrollView.delegate = self;

    self.pageControl.numberOfPages = TUTORIALNUMBEROFPAGES;
    self.pageControl.currentPage = 0;

    CGRect pageFrame = self.scrollView.frame;
    pageFrame.origin.x = pageFrame.size.width * 0;
    pageFrame.origin.y = 0;

    self.pageOne.frame = pageFrame;
    [self.scrollView addSubview:self.pageOne];

    pageFrame.origin.x = pageFrame.size.width * 1;
    self.pageTwo.frame = pageFrame;
    [self.scrollView addSubview:self.pageTwo];
}

- (void)scrollViewDidScroll:(UIScrollView *)sender 
{    
    if (pageControlUsed) {
        return;
    }

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

- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView 
{    
    pageControlUsed = NO;
}

- (IBAction)changePage:(id)sender 
{        
    NSInteger currentPage = self.pageControl.currentPage;
    CGPoint offset = CGPointMake(currentPage * self.scrollView.frame.size.width, 0);
    [self.scrollView setContentOffset:offset animated:YES];
    pageControlUsed = YES;
}

- (IBAction)nextButton:(id)sender
{
    [self changePage:self];
}
4

2 に答える 2

7

次のようなものを試してください。

 - (IBAction)nextPage:(id)sender 
  {        
     NSInteger currentPage = self.pageControl.currentPage + 1;
     CGPoint offset = CGPointMake(currentPage * self.scrollView.frame.size.width, 0);
    [self.scrollView setContentOffset:offset animated:YES];
    pageControlUsed = YES;
 }

  - (IBAction)nextButton:(id)sender
  {
      [self nextPage:self];

  }

そのコードの+1に注意してください。以前は、ページコントロールの値を取得しているだけなので、コンテンツオフセットを元のオフセットと正確に等しく設定していました。

于 2012-04-07T22:51:59.737 に答える
1

あなたはこれで試すことができます:

- (IBAction)changePage:(id)sender 
{        
    NSInteger currentPage = self.pageControl.currentPage;
    if([sender isKindOfClass:[UIButton class]){
       currentPage+=1;
    }
    CGPoint offset = CGPointMake(currentPage * self.scrollView.frame.size.width, 0);
    [self.scrollView setContentOffset:offset animated:YES];
    pageControlUsed = YES;
}

- (IBAction)nextButton:(id)sender
{
    [self changePage:sender];//if this action is attached just to your button
}
于 2012-04-07T23:01:24.443 に答える