0

各ページでこれを使用UIScrollViewおよび追加UIVIewしてページングを実装しました。驚くべきことに、ページングが有効になっているときに応答がありません! 以下は私のコードです。ページングを有効にして作業する方法を教えてください。UIControlsUIVIewUIControlUIScrollViewUIControlsUIScrollView

- (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;
}
4

1 に答える 1

0

pagingEnabled のない subScrollView を各ページに追加し、コントロールを subScrollView に追加するとうまくいきます! ページングを有効にしてスクロールビューにコントロールを直接追加すると、ジェスチャー認識エンジンの最初のレスポンダーは常にスクロールビューであるように見えるため、コントロールはイベントを取得せず、無効のように動作します!

于 2012-07-06T09:39:26.503 に答える