UIButton 对 Touch Down 事件的响应
Posted
技术标签:
【中文标题】UIButton 对 Touch Down 事件的响应【英文标题】:UIButton Response to Touch Down Event 【发布时间】:2014-09-07 18:58:57 【问题描述】:我正在尝试模仿 iPhone 秒表应用的按钮行为。所以我在按钮的 Touch Down 事件中添加了以下代码。
if ([sender.titleLabel.text isEqualToString:@"Start"])
[sender setTitle:@"Stop" forState:UIControlStateNormal];
[sender setTitleColor:[UIColor redColor] forState:UIControlStateNormal];
else
[sender setTitle:@"Start" forState:UIControlStateNormal];
[sender setTitleColor:[UIColor greenColor] forState:UIControlStateNormal];
但问题是,一旦按下按钮,文本和颜色就不会改变,我理解这是因为我有状态,forState:UIControlStateNormal。因此,在上面的代码中我替换了
forState:UIControlStateNormal
无处不在
forState:UIControlStateHighlighted|UIControlStateNormal
但现在的问题是,只要按下按钮,它就会显示“停止”,但一旦我松开按钮,它就会切换回“开始”。我不明白这种行为。任何帮助将不胜感激。
【问题讨论】:
嗯,我能够通过在 if 条件中使用变量 isRunning = YES/NO 而不是在 titleLabel.text 上进行条件来解决问题。因此,我确实赞扬了 Signo,因为他提出了类似的方法。但我仍然想了解为什么上述代码的行为与我解释的一样。 【参考方案1】:尝试从这里删除 UIControlStateNormal:
forState:UIControlStateHighlighted|UIControlStateNormal
只保留
forState:UIControlStateHighlighted
编辑:
您可以尝试的另一件事是创建一个 integer_t 变量(在您的 ViewDidLoad 上并将其设置为 2)并在每次按下按钮时增加它并检查数字是偶数还是奇数。 代码应该是这样的:
if (intVariable % 2 == 0)
[sender setTitle:@"Stop" forState:UIControlStateHighlighted|UIControlStateNormal];
[sender setTitleColor:[UIColor redColor] forState:UIControlStateHighlighted|UIControlStateNormal];
else
[sender setTitle:@"Start" forState:UIControlStateHighlighted|UIControlStateNormal];
[sender setTitleColor:[UIColor greenColor] forState:UIControlStateHighlighted|UIControlStateNormal];
intVariable++;
【讨论】:
我编辑了我的答案,这听起来很愚蠢,但我认为问题出在 If,如果你想尝试我上面发布的解决方案 :) 如果你知道答案,请只回答。以上是关于UIButton 对 Touch Down 事件的响应的主要内容,如果未能解决你的问题,请参考以下文章
第二个视图控制器中的 UIButton - Touch Up Inside 不起作用(Touch Down 可以)
UIButton 子类忽略“Touch Up Inside”事件