Uso de UIScrollView con paginación habilitada

He implementado paginación usando UIScrollView y añadiendo UIVIew y UIControls en este UIVIew en cada pagina. Sorprendentemente ninguno de los UIControl respondiendo cuando está encendido UIScrollView con paginación habilitada! El siguiente es mi código. alguien me podria decir como llegar UIControls trabajando en UIScrollView con paginación habilitada?

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

preguntado el 04 de julio de 12 a las 10:07

1 Respuestas

¡Agregar subScrollView sin pagingEnabled a cada página y controles en subScrollView funciona! Si agrega controles directamente a la vista de desplazamiento con la paginación habilitada, parece que el primer respondedor del reconocedor de gestos siempre es la vista de desplazamiento, por lo que sus controles nunca reciben el evento y se comportan como deshabilitados.

Respondido 06 Jul 12, 10:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.