使用 UIView 作为按钮

Posted

技术标签:

【中文标题】使用 UIView 作为按钮【英文标题】:Using a UIView as a button 【发布时间】:2012-03-07 23:50:24 【问题描述】:

我正在尝试将我在 Storyboard 中创建的 UIView 用作按钮。我认为可以使用 UIButton,将类型设置为自定义。但是我无法将子视图添加到 Storyboard 中的自定义 UIButton。

因此,我刚刚花了一个小时重新发明***,制作了我自己的自定义手势识别器来重新实现按钮功能。

当然,这不是最好的方法,所以我的问题 - 对于比我更有经验的 ios 开发人员 - 是什么是制作自定义按钮的最佳方法?

要清楚,它需要:

使用我创建的 UIView 作为可点击区域。 能够显示 不同的状态取决于当前是否突出显示 (即着陆)。 实际点击时执行一些操作。

感谢您的帮助。

【问题讨论】:

【参考方案1】:

您可以使用 UIButton,将类型设置为自定义,然后以编程方式添加您的子视图...

【讨论】:

所以要拥有一个自定义按钮,我基本上必须以编程方式制作所有内容,而不是使用 Storyboard? 不,您在情节提要上创建它,然后以编程方式添加您的视图(例如来自界面构建器)。【参考方案2】:

将您的 UIView 更改为情节提要中的 UIControl。然后使用方法[controlViewName addTarget:self action:@selector(*click handler method*) forControlEvents:UIControlEventTouchDown];单击处理程序方法 是处理程序方法名称的占位符。使用此方法,除了将UIControlEventTouchInsideUIControlEventTouchDragExitUIControlEventTouchDown 更改为在用户完成点击并分别将手指拖出视图时调用方法。我把它用在我现在正在做的事情上,效果很好。

在 Touch down 中,您需要:突出显示所有子视图 在 Touch up 里面你会想要:取消突出显示所有子视图并执行 segue 或执行按钮应该执行的任何操作 在 Touch Drag Exit 中,您需要:取消突出显示所有子视图

请参阅 LiCheng 在 this 类似的 SO 帖子中的第二个答案。

【讨论】:

【参考方案3】:

改为子类 UIControl。您可以向它添加子视图,它可以响应操作

【讨论】:

谢谢,我正在调查。【参考方案4】:

您为什么要实现自己的 GestureRecognizer?我建议使用 UIView,以便您可以在界面构建器中添加子视图并添加 UITapGestureRecognizer。您甚至可以以图形方式执行此操作,因为您不关心 IOS4 支持。

【讨论】:

我在使用 UITapGestureRecognizer 时遇到的问题是它没有提供任何方法来突出显示触地时的 UIView。否则它将是完美的(并且比任何其他解决方案都简单得多)。

以上是关于使用 UIView 作为按钮的主要内容,如果未能解决你的问题,请参考以下文章

uiview 作为包含 uitableview 的子视图

我的自定义 UIView 没有收到触摸

使用子视图按钮淡化 UIView

iOS 如何手动调整 UIImageView 使其像按钮一样?

将 UIView 从一个选项卡移动到另一个选项卡

如何使用 UIView 在单选按钮上制作多行标题