2012-11-22 12 views
5

Supponiamo di avere dieci pagine.L'evento UIControlEventValueChanged non viene attivato per UIPageControl in modo coerente

un gestore eventi per l'evento è aggiunto come di seguito:

eseguire l'applicazione. Ora nelle dieci pagine, per impostazione predefinita è selezionata la pagina 1 (indice 0). Tocca la seconda pagina o la terza pagina. L'evento non verrà attivato. Se l'ultima pagina è selezionata, l'evento verrà attivato. Lo stesso succede con l'ultima pagina. Dopo aver selezionato l'ultima pagina, seleziona la pagina precedente. L'evento non verrà attivato, ma se selezioni la prima pagina, l'evento non verrà attivato.

di vedere un semplice dimostrazione di questo caso, scaricare l'esempio UICatalog e aprire il ControlsViewController.m e modificare l'UIControlEventTouchUpInside a UIControlEventValueChanged in linea no 375.

- (UIPageControl *)pageControl 
{ 
    if (pageControl == nil) 
    { 
     CGRect frame = CGRectMake(120.0, 14.0, 178.0, 20.0); 
     pageControl = [[UIPageControl alloc] initWithFrame:frame]; 
     [pageControl addTarget:self action:@selector(pageAction:) forControlEvents:UIControlEventValueChanged]; 

     // in case the parent view draws with a custom color or gradient, use a transparent color 
     pageControl.backgroundColor = [UIColor grayColor]; 

     pageControl.numberOfPages = 10; // must be set or control won't draw 
     pageControl.currentPage = 0; 
     pageControl.tag = kViewTag; // tag this view for later so we can remove it from recycled table cells 
    } 
    return pageControl; 
} 

risposta

10

si potrebbe essere equivoco come funziona il controllo pagina . È un indicatore visivo del numero di pagine presenti, ma toccando un punto particolare non si passa a quella pagina. Si sposta sempre una pagina alla volta, toccando la metà sinistra si sposta indietro di una pagina e nella metà destra si sposta in avanti una pagina.

Se si è sulla prima pagina e si tocca la metà sinistra, non è possibile tornare indietro di un'altra pagina, quindi non accade nulla.

Non mi piace molto questo comportamento, in particolare sull'iPad, quindi di solito uso una sottoclasse o il mio tocco personale per risolvere il problema se la posizione tattile è a sinistra oa destra della pagina correntemente selezionata e inviare il evento in modo appropriato.

+0

@jrtuton: Grazie. Quando ho provato l'app in iPad, sono riuscito a capire meglio il caso. – Krishnan

0

È possibile utilizzare UITapGestureRecognizer invece di utilizzare addTarget: azione di auto: @selector()

//Added UITapGestureRecognizer instead of using addTarget: method   
UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] init];   
tapGesture addTarget:self action:@selector(pageAction:) ]; 
[pageControl addGestureRecognizer:tapGesture]; 
[tapGesture release]; 
tapGesture = nil; 


-(void)pageAction:(UITapGestureRecognizer *)tapGesture{ 

    UIPageControl *pageControl = (UIPageControl *)tapGesture.view;  

    NSLog(@"page Number: %d",pageControl.currentPage); 


} 
+2

Se si desidera rilevare i tocchi, è molto più semplice utilizzare semplicemente il gestore di tap integrato che tutti gli UIControls hanno. Ad esempio: '[pageControl addTarget: self action: @selector (handleTap :) forControlEvents: UIControlEventTouchUpInside]' –

Problemi correlati