2012-11-22 3 views
5

10 페이지를 가정합니다.UICageControl에 대해 UIControlEventValueChanged 이벤트가 계속 발생하지 않습니다.

이벤트의 이벤트 처리기가 다음과 같이 추가됩니다.

앱을 실행합니다. 이제 10 페이지에서 기본적으로 1 페이지 (인덱스 0)가 선택됩니다. 두 번째 페이지 또는 세 번째 페이지를 터치합니다. 이벤트가 트리거되지 않습니다. 마지막 페이지가 선택되면 이벤트가 트리거됩니다. 마지막 페이지에서도 마찬가지입니다. 마지막 페이지를 선택했으면 이전 페이지를 선택하십시오. 이벤트는 트리거되지 않지만 첫 번째 페이지를 선택하면 이벤트가 트리거되지 않습니다.

에는 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; 
} 

답변

10

당신은 어떻게 페이지 제어 일을 오해되지 않을 수 있습니다,이 경우의 쉬운 데모를 참조 UICatalog 예제를 다운로드하고 ControlsViewController.m을 열어 줄 UIControlEventValueChanged에 UIControlEventTouchUpInside을 변경하려면 . 현재 페이지 수를 시각적으로 표시하지만 특정 점을 탭하면 해당 페이지로 이동하지 않습니다. 한 번에 한 페이지 씩 이동하고 왼쪽 절반을 탭하면 페이지가 뒤로 이동하고 오른쪽 절반에서는 한 페이지 앞으로 이동합니다.

첫 페이지에있는 경우 왼쪽 절반을 탭하면 다른 페이지로 돌아갈 수 없으므로 아무런 반응이 없습니다.

특히 iPad에서는 그 동작이 마음에 들지 않으므로 터치 위치가 현재 선택된 페이지의 왼쪽이나 오른쪽 인 경우 해결하려면 하위 클래스 나 자체 터치 처리를 사용하고 사건을 적절하게

+0

@jrtuton : 감사합니다. iPad에서 응용 프로그램을 테스트했을 때 나는 그 사건을 더 잘 이해할 수있었습니다. – Krishnan

0

는 대신 addTarget을를 사용하는 UITapGestureRecognizer를 사용할 수 있습니다 자기 조치 : @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

탭을 감지하려면 모든 UIControl에있는 기본 제공 탭 처리기를 사용하는 것이 훨씬 간단합니다. 예를 들면 다음과 같습니다.'[pageControl addTarget : self action : @selector (handleTap :) forControlEvents : UIControlEventTouchUpInside]' –

관련 문제