使用 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];
。 单击处理程序方法 是处理程序方法名称的占位符。使用此方法,除了将UIControlEventTouchInside
和UIControlEventTouchDragExit
的UIControlEventTouchDown
更改为在用户完成点击并分别将手指拖出视图时调用方法。我把它用在我现在正在做的事情上,效果很好。
在 Touch down 中,您需要:突出显示所有子视图 在 Touch up 里面你会想要:取消突出显示所有子视图并执行 segue 或执行按钮应该执行的任何操作 在 Touch Drag Exit 中,您需要:取消突出显示所有子视图
请参阅 LiCheng 在 this 类似的 SO 帖子中的第二个答案。
【讨论】:
【参考方案3】:改为子类 UIControl。您可以向它添加子视图,它可以响应操作
【讨论】:
谢谢,我正在调查。【参考方案4】:您为什么要实现自己的 GestureRecognizer?我建议使用 UIView,以便您可以在界面构建器中添加子视图并添加 UITapGestureRecognizer。您甚至可以以图形方式执行此操作,因为您不关心 IOS4 支持。
【讨论】:
我在使用 UITapGestureRecognizer 时遇到的问题是它没有提供任何方法来突出显示触地时的 UIView。否则它将是完美的(并且比任何其他解决方案都简单得多)。以上是关于使用 UIView 作为按钮的主要内容,如果未能解决你的问题,请参考以下文章