如何在按下按钮时切换隐藏标签?
How do I toggle hidden of a label while a button is pressed?
我想弄清楚如何在 OS 中按下按钮时只显示标签。我知道如何操作触摸事件,但我不确定如何将 UILongPressGestureRecognizer 合并到其中。
最简单的做法是向 touchDown 事件添加一个动作,并向 touchUpInside 和 touchUpOutside 添加一个单独的动作。
在 touchDown 动作上显示标签,在 touchUpInside / touchUpOutside 动作上隐藏它。 (为了完整起见,在 touchCancel 上,正如 nhgrif 在他非常详尽的回答中所建议的那样。)
在这种情况下,长按手势识别器将不起作用。您可以创建一个自定义手势识别器,在触摸时触发一个事件,在释放时触发另一个事件,然后使用它。其实做起来并不难
编辑
我刚刚将一个名为“MorphingButton”(link) 的演示项目上传到 GitHub,这是我在 Stack Overflow 上为另一个问题创建的。
该项目现在在触摸应用程序按钮时显示标签,并在您释放按钮时隐藏标签。
该项目是一个混合 Swift/Objective-C 项目,展示了如何使用两种语言进行按钮变形和标签 showing/hiding。它有一个带有 Swift 选项卡和 Objective-C 选项卡的选项卡栏。
UIButton
class 以及许多其他 UIControl
子class 可以关联许多操作。
当我们将一个动作从界面生成器连接到我们的源代码文件时,如果我们打开 "Event" 下拉菜单,我们会看到一长串选项:
在几乎所有情况下,我们都只将我们的操作挂钩到 "Touch Up Inside"。这允许用户考虑他们是否真的想要按下按钮。如果他们在放开之前将手指从按钮上拖开,则不会触发操作,因为 "up touch" 手势发生在对象的边界之外。
但是在这里,我们实际上想要连接按钮的 "touch down" 事件。这是我们显示标签的时候。
让我们继续创建一个 "touch down" 事件和一个 "touch up inside" 事件:
Swift
@IBAction func buttonTouchDown(sender: UIButton) {
self.myLabel.hidden = false
}
@IBAction func buttonTouchEnded(sender: UIButton) {
self.myLabel.hidden = true
}
Objective-C
- (IBAction)buttonTouchDown:(UIButton *)sender {
self.myLabel.hidden = NO;
}
- (IBAction)buttonTouchEnded:(UIButton *)sender {
self.myLabel.hidden = YES;
}
至此,buttonTouchEnded
已经完全正常设置,buttonTouchDown
是在"Event"列表中选择"touch down"设置的
我们始终可以通过在界面生成器中右键单击它来验证我们的控件连接到什么:
但是这个菜单不仅仅用于检查我们已经连接的内容。从这里,我们可以将 任何 其他操作连接到我们现有的 @IBAction
方法,只需单击圆圈并拖动到现有方法即可。
所以我们显然希望标签在我们停止按下按钮时消失,这是一种正常的修饰,就像您连接任何其他按钮一样。剩下的唯一问题是,你想要什么样的行为?
如果想让标签只在手指抬起时消失,不管手指走到哪里,那我们也要勾起来"touch up outside".
如果您希望标签在用户将手指拖离按钮时消失,那么我们应该连接 "touch drag exit" 操作。
我们可能还想连接 "touch cancel" 操作,如果某种系统事件(可能是传入的 phone 调用)取消了触摸,就会发生这种情况。
This Stack Overflow answer 详细说明了我们拥有的操作选项之间的差异,因此您可以根据需要精确设计行为。
无论如何,一旦我们决定要将哪些操作连接到哪些方法,请调出右键单击菜单并从圆圈中单击并拖动到方法: