UIPageControl在值改变时没有调用选择器

4

我第一次尝试使用 UIPageControl,但是似乎无法在 UIControlEventValueChanged 上调用函数。我错过了什么吗?我甚至尝试了故事板实现,但结果仍然不对。我还尝试了UIControlEventTouchUpInside和其他操作,但都没有调用下面的changePage: 函数。

在 .h 文件中:

@property (nonatomic, retain) UIPageControl *introPageControl;
-(IBAction)changePage:(id)sender;

在.m文件中:
@synthesize introPageControl;

- (void)viewDidLoad {
    [super viewDidLoad];
    self.introPageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0,208,self.view.frame.size.width,36)];
    self.introPageControl.numberOfPages = 4;
    self.introPageControl.currentPage = 0;
    [self.introPageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];
    [self.view addSubview:self.introPageControl];
}

-(IBAction)changePage:(id)sender {
    // NEVER GETS CALLED :(
}

我复制粘贴了你的代码并看到changePage方法被调用。你能否提供更多细节?也许你在页面控制器上方添加了另一个子视图? - Alexander Merchi
或者你取消订阅事件? - Alexander Merchi
@AlexanderMerchi,感谢您的回复。self.introPageControl是最后添加的对象,因此它在最上层。我该如何检查取消订阅事件?我从未添加过显式代码来执行此操作。 - AddisDev
我创建了一个空项目,这些代码可以工作。我在iOS 4.3、iOS 5.1、iOS 6.1上进行了检查...... - Alexander Merchi
请尝试使用UIControlEventTouchUpInside事件进行检查。 - Alexander Merchi
2个回答

6

只有在用户点击UIPageControl视图对象时,才会调用UIControlEventValueChanged事件。


“tabbed”是什么意思?你是指“tapped”吗?我也遇到了类似的问题,但敲击控件没有效果。 - Greg Brown
2
找到了我的问题 - 我的页面控件太小了。似乎页面控件只响应在点的左侧或右侧的轻触。点击点本身没有任何效果。 - Greg Brown

3

Swift 3:

pageControl.numberOfPages = 6
pageControl.currentPage = 0
pageControl.addTarget(self, action: #selector(pageControlTapHandler(sender:)), for: .touchUpInside)

...

func pageControlTapHandler(sender:UIPageControl) {
    print("currentPage:", sender.currentPage) //currentPage: 1
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接