UIButton事件。有什么区别?

77

我遇到了一个问题,我的按钮应该在显示从其调用的弹出窗口时保持“按下”状态。弹出窗口是一些过滤器的选择器,并且这些过滤器显示在按钮本身上。当我点击它并显示弹出窗口时,无论如何它都会变成未选中。

我认为我必须重新定义它在触摸事件上的行为,并使其不响应标准的touch up inside。然后我想知道其他事件的职责是什么?但我在iOS库中找不到事件列表,在StackOverflow上只有关于touch up insidetouch down的不正确行为的问题。

那么触摸事件有什么区别呢?

  1. touch cancel - 当您触摸按钮但将手指移开并使其保持未选中状态时?
  2. touch down - 立即轻敲。
  3. touch down repeat ??
  4. touch drag enter ??
  5. touch drag exit ??
  6. touch drag inside ??
  7. touch drag outside ??
  8. touch up inside - 当您轻触并释放按钮,仍留在其范围内。 它将UIButtons状态更改为Normal。
  9. touch up outside - 当您轻敲并释放按钮时,将其留在其范围之外?

其他IBActions不是由UIButton发送的,对吗? 还有这些事件如何改变UIButton的外观? 如highlightedselected

我会很感激一篇关于IBActions的好文章的链接,因为我找不到它。


7
http://developer.apple.com/library/ios/#documentation/uikit/reference/UIControl_Class/Reference/Reference.html#//apple_ref/doc/constant_group/Control_Events - janusfidel
@janusfidel非常感谢,您的回答完全解决了我的问题 :) - Protheus
2个回答

151
Apple's doc for UIControlEvents
  1. UIControlEventTouchCancel

    系统事件,取消控件的当前触摸。

  2. UIControlEventTouchDown

    控件中的按下事件。

  3. UIControlEventTouchDownRepeat

    控件中重复的按下事件;对于此事件,UITouch tapCount 方法的值大于1。

  4. UIControlEventTouchDragEnter

    手指拖入控件边界的事件。

  5. UIControlEventTouchDragExit

    手指从控件内部拖到其边界外部的事件。

  6. UIControlEventTouchDragInside

    手指在控件范围内拖动的事件。

  7. UIControlEventTouchDragOutside

    手指刚好拖出控件边界的事件。

  8. UIControlEventTouchUpInside

    控件中手指在范围内松开的事件。

  9. UIControlEventTouchUpOutside

    控件中手指在范围外松开的事件。


4
只是为了澄清,“touch-up”事件的意思是手指被移开了,对吗?因为这可能意味着许多不同的事情(例如,轻轻向上滑动手指,或向上滑动并移开手指,或者它可能与单词“touch-up”的实际含义 touch-up )有奇怪的关联。 - Parthian Shot
1
@ParthianShot 是指用户将手指从屏幕上移开的时候,没错。 - Protheus
听起来DragEnterDragInside非常相似? - Crashalot
2
@Crashalot 我的理解是,drag inside 包括手指在视图内移动,而 drag enter 只涉及边界穿越。 - Sam
1
触摸按下手势并非总是被检测到。有时它可以被检测到。我怀疑这是由于故事板的布局位置所致。你们有什么想法吗?@Protheus - Cherry_thia

14

按我认为的常用顺序/发生可能性列出了普通按钮的操作:

UIControlEventTouchDown:用户点击了按钮。这会在手指/触笔接触到屏幕时触发。

UIControlEventTouchUpInside:用户点击了按钮。这会在手指/触笔从屏幕上撤回时触发。


对于滑块和拖动事件(如移动组件),以下按发生顺序排列:

UIControlEventTouchDragInside:当手指拖入按钮区域时触发。

UIControlEventTouchDragExit:在拖动过程中触发,仅调用一次,即用户的手指/触笔离开按钮边界时。

UIControlEventTouchDragOutside:在拖动过程中触发,在 'UIControlEventTouchDragExit' 之后 连续调用,只要原始触摸仍在继续。

UIControlEventTouchUpOutside:这仅仅是手指/触笔抬起,但仅当手指/触笔不再在按钮范围内时才触发。重要的事情(也许很明显)是要指出,触摸必须曾经在按钮内才能将此事件与按钮关联起来。

注意:我理解以上操作对以下情况有帮助:

  1. 滑块:如你所料,触摸可能是有意的,但因为快速滑动的动作,他们的手指移动可能会变得松散,并在滑块区域之外抬起。
  2. 移动组件:当您在屏幕上推动事物时,希望手指/笔触碰到组件/对象的边界时发生移动。

其他事件:

UIControlEventTouchCancel:某些用户无法控制的事情正在取消他们的触摸操作。 把它看做是手机端出了一些问题。

UIControlEventTouchDownRepeat: 想检测您的用户是否疯狂地点击按钮? 想检测他们是否仍处于Windows模式并尝试“双击”? 或者您设计了一个按钮,如果用户连续点击两次,则执行不同的操作。 这个事件可以帮助解决所有这些问题!


参考文献:

SO 1:UIControlEventTouchDragOutside和UIControlEventTouchDragExit之间的区别

SO 2:UIControlEventTouchCancel是什么?


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