如何以编程方式突出显示 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?的主要内容,如果未能解决你的问题,请参考以下文章

UIButton 未在边框上突出显示

UIButton 突出显示的背景图像未显示

如何在nib文件中按下时禁用UIButton高亮显示?

在 Swift 中以编程方式突出显示 UITableViewCell

如何以编程方式(VS 6)取消突出显示 MFC CListCtrl 中先前选择的行?

用户单击时如何禁用 UIButton 的突出显示