如果您只是将UIButton放在UIScrollView中,则快速点按该按钮时该按钮不会突出显示。相反,您必须在按钮突出显示之前点按并按住一段时间。根据文档,这是因为UIScrollView等待一点,以确定用户是否打算在转动触摸滚动视图中的视图之前拖动滚动视图。
正如几个Stackoverflow答案中所述(例如:https://stackoverflow.com/a/19656611/2135004),解决方案是通过将UIScrollView的delaysContentTouches属性设置为NO来防止此延迟。 (另一个步骤是将UIScrollView子类化为覆盖touchesShouldCancelInContentView:为UIButtons返回YES,因此如果用户最初触摸滚动视图中的按钮,用户仍然可以滚动滚动视图。)
然而,与App Store应用程序交互似乎提出了另一种解决方案。 (虽然它可能有点挑剔,但有一个原因我没有使用delayedContentTouches设置为NO的解决方案,因为我不希望按钮突出显示用户是否快速拖动按钮以滚动滚动视图。这是实际上突出显示行为UITableViewCells。)考虑App Store应用程序的以下屏幕截图:
蓝色的“快速链接”按钮(即“应用程序集”,“游戏集合”和“Apple制造的应用程序”)似乎是以UIButtonTypeSystem风格实现的UIButtons,因为它们的突出显示会逐渐消失。将手指拖入和拖出。此外,滚动视图的delaysContentTouches属性似乎不会设置为NO,因为当您快速点击它们时,蓝色“快速链接”按钮不会突出显示。但是,当您快速点击它们时,灰色边框按钮(即“兑换”,“发送礼物”和“Apple ID:...”)会突出显示! (当您将手指拖入和拖出时,它们的突出显示也会淡入淡出。)另请注意,当您拖动滚动视图时碰巧碰到它们时,按钮不会突出显示。
这些灰色边框按钮是如何实现的?我想要的关键行为是,当你在滚动视图中快速点击它们时会突出显示延迟内容触摸。(当你将手指拖入和移出它们时,它们也应该突出显示和不突出显示UIButtons,最好是通过淡化他们的突出显示。)我不知道如何通过继承UIButton来轻松实现这一点,我甚至不确定是否以某种方式继承UIControl以创建新的按钮类也可以。
答案 0 :(得分:0)
我认为这里发生的事情是灰色按钮的突出显示状态在其操作触发时被设置,然后在显示结果警报或工作表时取消设置。
(如果您没有显示提醒或工作表,则只需在下一个运行循环中安排它不亮。)