2012-11-22 12 views
5

On sayfamızın olduğunu varsayalım.UIControlEventValueChanged olayı sürekli olarak UIPageControl için tetiklenmez

olay için bir olay işleyicisi aşağıdaki gibi eklenir:

Çalıştır uygulaması. Şimdi on sayfada, varsayılan olarak sayfa 1 (dizin 0) seçildi. İkinci sayfaya veya üçüncü sayfaya dokunun. Olay tetiklenmeyecek. Son sayfa seçilirse, etkinlik tetiklenir. Aynısı son sayfa ile olur. Son sayfayı seçtikten sonra, bir önceki sayfayı seçin. Etkinlik tetiklenmez, ancak ilk sayfayı seçerseniz, etkinlik tetiklenmez.

hiçbir 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; 
} 

cevap

10

Sen nasıl sayfa denetimi çalışmalarını yanlış anlama olabilir, bu durumda kolay bir gösteri bkz UICatalog örneğini indirip ControlsViewController.m açıp doğrultusunda UIControlEventValueChanged için UIControlEventTouchUpInside değiştirmek için . Mevcut sayfaların görsel bir göstergesidir, ancak belirli bir noktaya dokunmak o sayfaya gitmez. Her seferinde bir sayfayı bir kerede hareket ettirirsiniz, sol tarafa dokunmak bir sayfaya geri gider ve sağ taraftaki sayfa ilerler.

İlk sayfadaysanız ve soldaki yarısına dokunursanız, başka bir sayfaya geri dönemezsiniz, bu nedenle hiçbir şey olmuyor.

Özellikle iPad'de bu davranışı sevmiyorum, genellikle dokunmatik alanın seçili sayfanın solunda mı yoksa sağında mı olduğuna karar vermek için genellikle bir alt sınıfı veya kendi dokunmatik işlemimi kullanın. olay uygun şekilde.

+0

@jrtuton: Teşekkür. IPad'de uygulamayı test ettiğimde vakayı daha iyi anlayabildim. – Krishnan

0

yerine addTarget kullanmanın UITapGestureRecognizer kullanabilirsiniz: kendinden eylemi: @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

Muslukları tespit etmek istiyorsanız, tüm UIControl'lerin sahip olduğu yerleşik musluk işleyicisini kullanmak çok daha basittir. Örneğin: '[pageControl addTarget: kendi kendine hareket: @selector (handleTap :) forControlEvents: UIControlEventTouchUpInside]' –

İlgili konular