UIPageControl 没有在 valueChanged 上调用选择器

Posted

技术标签:

【中文标题】UIPageControl 没有在 valueChanged 上调用选择器【英文标题】:UIPageControl not calling selector on valueChanged 【发布时间】:2013-04-15 13:34:04 【问题描述】:

我第一次尝试使用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 方法。你能提供更多细节吗?您是否可以在页面控件上方添加另一个子视图? 或者您可能取消订阅活动? @AlexanderMerchi 感谢您的回复。 self.introPageControl 是添加的最后一个对象,因此它位于最上层。我将如何检查退订事件?我从来没有添加明确的代码来做到这一点。 我创建了一个空项目,这些代码工作。我签入了 ios 4.3、ios 5.1、ios 6.1....... 您能否尝试 UIControlEventTouchUpInside 事件进行检查 【参考方案1】:

UIControlEventValueChanged 仅在 UIPageControl 视图对象被点击时调用。

【讨论】:

“标签”是什么意思?你的意思是“敲击”?我遇到了类似的问题,但是点击控件没有效果。 发现我的问题 - 我的页面控件太小。页面控件似乎只响应点左侧或右侧的点击。点击这些点本身没有任何效果。【参考方案2】:

斯威夫特 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

【讨论】:

以上是关于UIPageControl 没有在 valueChanged 上调用选择器的主要内容,如果未能解决你的问题,请参考以下文章

UIPageControl + UIScrollView 没有正确计算页面

搜索页面的 UIPageControl 点

如何将 UIPageControl 与 iCarousel 一起使用?

在 iOS 中增加 UIPageControl 大小

如何在全屏 ChildViewController 上显示 UIPageControl?

如何更改 UIPageControl 点 [重复]