使用UIScrollView启用分页

时间:2012-07-04 09:02:05

标签: ios uiscrollview paging uicontrol

我已使用UIScrollView实施了分页,并在每个页面的UIVIew中添加了UIControlsUIVIew。令人惊讶的是UIControlUIScrollView启用分页时没有响应!以下是我的代码。有人可以告诉我如何让UIControlsUIScrollView上启用分页工作吗?

- (void)viewDidLoad
{
    [super viewDidLoad];

    AppDelegate *delegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];

    int totalPages = [[delegate sections] count] + 2; // 2 for startOfDayQuestions and endOfDayQuestions

    int X = 45, Y = 20, H = 40, W = 680;

    // start of the day questions
    CGRect startFrame = scrollView.frame;
    startFrame.origin.x = 0;
    startFrame.origin.y = 0;

    UIView *startPage = [[UIView alloc] initWithFrame:startFrame];

    UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(X, Y, W, H)];
    label.backgroundColor = [UIColor clearColor];
    label.textColor = [UIColor blackColor];
    label.text = @"Text";
    label.font = [UIFont fontWithName:paragraph_font_name size:paragraph2_font_size];
    [startPage addSubview:label];

    Y += H;

    UITextField *textField = [[UITextField alloc] initWithFrame:CGRectMake(X, Y, W, H)];
    textField.borderStyle = UITextBorderStyleRoundedRect;
    textField.font = [UIFont systemFontOfSize:15];
    textField.placeholder = @"enter text";
    textField.autocorrectionType = UITextAutocorrectionTypeNo;
    textField.keyboardType = UIKeyboardTypeDefault;
    textField.returnKeyType = UIReturnKeyDone;
    textField.clearButtonMode = UITextFieldViewModeWhileEditing;
    textField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter;    
    textField.delegate = self;
    textField.userInteractionEnabled = YES;
    [startPage addSubview:textField]; --> This UITextField doesn't respond when added to startPage and in turns scrollView but works fine if I add it to self.view!

    // a page is the width of the scroll view
    scrollView.pagingEnabled = YES;
    scrollView.userInteractionEnabled = YES;
    scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * totalPages, scrollView.frame.size.height);
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.scrollsToTop = NO;
    scrollView.delegate = self;

    pageControl.numberOfPages = totalPages;
    pageControl.currentPage = 0;

}

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

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

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

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

- (IBAction)changePage:(id)sender
{
    int page = pageControl.currentPage;

    CGRect frame = scrollView.frame;
    frame.origin.x = frame.size.width * page;
    frame.origin.y = 0;
    [scrollView scrollRectToVisible:frame animated:YES];

    pageControlUsed = YES;
}

1 个答案:

答案 0 :(得分:0)

为每个页面添加没有pagingEnabled的subScrollView,并将控件添加到subScrollView中!如果您在启用分页的情况下直接向scrollview添加控件,则手势识别器的第一个响应者似乎始终是scrollview,因此您的控件永远不会获取事件并且表现得像禁用!

相关问题