如何以编程方式突出显示 UIButton?
Posted
技术标签:
【中文标题】如何以编程方式突出显示 UIButton?【英文标题】:How to programmatically highlight a UIButton? 【发布时间】:2008-12-09 06:05:25 【问题描述】:我有很多用户抱怨 iPhone 上的小“i”信息按钮很难触摸。好的,很简单——我只是在它后面贴了一个大而隐蔽的按钮,即使是最粗心的手指触摸也不会错过它,当你触摸它时,它会执行 infoButtonAction。
问题是,我想让信息按钮本身闪烁大约 0.25 秒,只是为了提供视觉上的“这就是正在发生的事情”类型的反馈。我的意思是,我已经假设您打算点击“i”按钮,所以我只是将其视为您确实点击了它。
我试过了,但它不起作用:
UIImage* normalImage = [_infoButton imageForState:UIControlStateNormal];
UIImage* highlighted = [_infoButton imageForState:UIControlStateHighlighted];
_infoButton.highlighted = YES; // flash the button
[_infoButton setImage:highlighted forState:UIControlStateNormal];
[_infoButton setNeedsDisplay]; //* FIXME: No flash?!
[(AppDelegate*)[[UIApplication sharedApplication] delegate] infoTap]; // do the info action
_infoButton.highlighted = NO;
[_infoButton setImage:normalImage forState:UIControlStateNormal];
[_infoButton setNeedsDisplay];
关于如何获得我想要的行为的任何想法?
(我也愿意接受有关用户反馈的其他想法,但仍然很好奇我会如何做到这一点。想象一下,相反,我有一个“游戏”/恶作剧,您可以在其中按下“确定”按钮并“取消” " 闪烁,反之亦然,或者同样愚蠢的东西。)
【问题讨论】:
【参考方案1】:“i”按钮的大小应为 44x44(Apple 标准手指大小),这可以在 Interface Builder 中完成。
对于某些动画,我建议研究 Core Animation。
【讨论】:
啊!我没有意识到新的信息按钮不是“开箱即用”(以编程方式创建时)为 44x44。很重要的一点;谢谢! 真的可以在 IB 中调整大小吗?宽度和高度选项对我来说是灰色的。 我想当我写这个(并且提出问题)时,必须在代码中创建“i”按钮。现在该按钮在 IB 中可用。【参考方案2】:问题是您将按钮标记为需要显示(调用 -setNeedsDisplay
是不必要的;按钮在内部调用它),但是却不允许运行循环有机会显示新图像。
在 Cocoa 中,您可以使用 -performClick:
之类的东西,但在 iPhone 上不可用。
相反,我建议您尝试调用-setSelected:
或-setHighlighted:
,并在两者之间延迟。
【讨论】:
好的,44x44 的东西解决了我的元问题,但这是我提出的“主要”问题的答案。谢谢!【参考方案3】:我不确切知道您的 infotap
方法中发生了什么,但似乎没有任何东西会导致您的第一个 setImage:
调用和第二个调用之间有很大的延迟。我的猜测是,事情发生的速度比眼睛看到的要快。我建议查看 NSTimer
以尝试在那里设置特定的延迟。
【讨论】:
以上是关于如何以编程方式突出显示 UIButton?的主要内容,如果未能解决你的问题,请参考以下文章
在 Swift 中以编程方式突出显示 UITableViewCell