按下按钮时如何切换标签的隐藏?

时间:2015-06-09 22:31:43

标签: ios uibutton uikit uilabel

我试图找出在OS中按下按钮时如何仅显示标签。我知道如何操作触摸事件,但我不知道如何将UILongPressGestureRecognizer纳入其中。

2 个答案:

答案 0 :(得分:6)

UIButton类以及许多其他UIControl子类可以连接许多操作。

当我们将界面构建器中的操作连接到源代码文件时,如果我们打开“事件”下拉列表,我们会看到一长串选项:

Choosing IBAction event

在几乎所有场景中,我们只是将我们的行动挂钩到“Touch Up Inside”。这允许用户考虑他们是否想要真正按下按钮。如果他们在放开之前将手指从按钮上移开,则动作不会触发,因为“向上触摸”手势发生在对象的边界之外。

但是在这里,我们希望实际上将按钮的“触地”事件挂钩。这是我们显示标签的时候。

让我们继续创建一个“触地”事件和一个“内部触摸”事件:

夫特

@IBAction func buttonTouchDown(sender: UIButton) {
    self.myLabel.hidden = false
}

@IBAction func buttonTouchEnded(sender: UIButton) {
    self.myLabel.hidden = true
}

目标C

- (IBAction)buttonTouchDown:(UIButton *)sender {
    self.myLabel.hidden = NO;
}

- (IBAction)buttonTouchEnded:(UIButton *)sender {
    self.myLabel.hidden = YES;
}

到目前为止,buttonTouchEnded已完全正常设置,并且通过从“事件”列表中选择“触摸”来设置buttonTouchDown

我们总是可以通过在界面构建器中右键单击它来验证我们的控件是什么连接的:

Button sent events

但是这个菜单不仅仅是简单地检查我们已经连接的东西。从这里开始,我们只需点击圈子并拖动到现有方法,就可以将其他操作的任何连接到现有的@IBAction方法。

因此,如果我们停止按下按钮,我们显然希望标签消失,正常的修饰就像你连接任何其他按钮一样。剩下的唯一问题是,你想要什么样的行为?

如果您希望标签仅在手指抬起时消失,无论手指在哪里,我们还必须勾起“向外触摸”。

如果您希望当用户将手指从按钮上移开时标签消失,那么我们应该连接“触摸拖动退出”操作。

我们也可能想要联系“触摸取消”操作,如果某种系统事件(可能是来电)取消触摸,就会发生这种情况。

This Stack Overflow answer详细说明了我们所拥有的行动选项之间的差异,因此您可以根据需要制定行为。

无论如何,一旦我们决定了哪些操作可以与哪些方法相关联,请调出右键菜单并从圆圈中单击并拖动到方法:

Hooking up "Touch Cancel" to buttonTouchEnded(sender:)

答案 1 :(得分:2)

最简单的方法是向touchDown事件添加操作,并为touchUpInside和touchUpOutside添加单独的操作。

在touchDown操作上显示标签并将其隐藏在touchUpInside / touchUpOutside操作上。 (并且为了完整性,在touchCancel上,正如nhgrif在他非常彻底的回答中所建议的那样。)

长按手势识别器在这种情况下无法工作。您可以创建一个自定义手势识别器,在触摸时触发一个事件,在发布时触发另一个事件,并使用它。实际上并不难做到。

修改

我刚刚向GitHub上传了一个名为" MorphingButton" (链接)我在Stack Overflow上为另一个问题创建了。

该项目现在会在触摸应用程序按钮时显示标签,并在您释放按钮时隐藏标签。

该项目是一个混合的Swift / Objective-C项目,展示了如何在两种语言中进行按钮变形和标签显示/隐藏。它有一个带有Swift选项卡和Objective-C选项卡的标签栏。