首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >UISlider返回两个触摸内部事件,为什么会发生这种情况?

UISlider返回两个触摸内部事件,为什么会发生这种情况?
EN

Stack Overflow用户
提问于 2009-06-30 11:26:08
回答 9查看 10.4K关注 0票数 6

我有一个滑块,用于在某个地方设置一个浮点值。我将更改后的值连接到viewController中的一个方法。那部分运作得很好。

我需要知道用户何时开始触摸控件,但不一定是滑块更改的每个瞬间(我收到的值更改事件)。因此,我将一个Touch Inside事件连接到viewController中的另一个方法。

问题是,当用户接触UISlider控件时,该方法会被调用两次。见鬼?在UIButtons或其他触控事件(如touch Down )中,它不是这样工作的。

我可以绕过它,我认为,但它似乎是一个错误的方式,滑块控制接触。有人知道为什么会这样吗?

BTW:双触事件发生时,即使是触摸内部是唯一的连接事件。

EN

回答 9

Stack Overflow用户

发布于 2010-06-24 10:37:21

这样它就不会与未来的更新中断

代码语言:javascript
复制
[customSlider addTarget:self action:@selector(sliderDown:) forControlEvents:UIControlEventTouchDown];

[customSlider addTarget:self action:@selector(sliderAction:) forControlEvents:UIControlEventTouchUpInside];



- (void)sliderDown:(id)sender
{

    sliderused = NO;

}

- (void)sliderAction:(id)sender
{
    if(sliderused){
    return;
}

sliderused = YES;

//Your Code Here
}
票数 6
EN

Stack Overflow用户

发布于 2010-04-01 17:10:34

如果您愿意对滑块进行子类化,那么可以通过实现endTrackingWithTouch来轻松地解决这个问题,并且什么也不做:

代码语言:javascript
复制
- (void) endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
{}

这里唯一要注意的是,某些特定的UIControlEvents不能正常运行。我相信他们是以下的,但我没有做具体的测试,看看哪些工作,哪些不工作。然而,触摸改变和触摸的内部肯定做工作,没有重复的射击。

代码语言:javascript
复制
   UIControlEventTouchDragInside     = 1 <<  2,
   UIControlEventTouchDragOutside    = 1 <<  3,
   UIControlEventTouchDragEnter      = 1 <<  4,
   UIControlEventTouchDragExit       = 1 <<  5,
票数 2
EN

Stack Overflow用户

发布于 2009-08-20 21:49:49

我也有这个问题,我的解决方案是添加一个布尔"allowEvent“。然后,我将UIControlEventTouchDown连接到一个将"allowEvent“设置为YES的函数。

在UIControlEventTouchUpInside的选择器中,我检查了allowEvent是否为YES,然后执行事件并将allowEvent设置为NO。

然后,即使该事件触发两次,也只能执行一次。

希望能帮上忙!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1063158

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档