5

假设我们有十页。

该事件的事件处理程序添加如下:

运行应用程序。现在在十页中,默认选择第 1 页(索引 0)。触摸第二页或第三页。该事件不会被触发。如果选择了最后一页,将触发该事件。最后一页也是如此。选择最后一页后,选择上一页。该事件不会被触发,但是如果您选择第一页,则不会触发该事件。

要查看此案例的简单演示,请下载 UICatalog 示例并打开 ControlsViewController.m 并将 UIControlEventTouchUpInside 更改为 UIControlEventValueChanged(第 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;
}
4

2 回答 2

10

您可能误解了页面控件的工作原理。它是当前页面数量的视觉指示器,但点击特定点不会转到该页面。您一次只能移动一页,点击左半部分后退一页,点击右半部分前进一页。

如果您在第一页,然后点击左半部分,则无法返回另一页,因此什么也不会发生。

我不太喜欢这种行为,尤其是在 iPad 上,所以通常使用子类或我自己的触摸处理来确定触摸位置是在当前选定页面的左侧还是右侧,并适当地发送事件。

于 2012-11-22T07:53:41.717 回答
0

您可以使用UITapGestureRecognizer而不是使用 addTarget :self action:@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);


}
于 2012-11-22T08:16:57.737 回答