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

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

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

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

要清楚,它需要:

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

感谢您的帮助。

【问题讨论】:

    标签: ios ios5 uiview uibutton


    【解决方案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。否则它将是完美的(并且比任何其他解决方案都简单得多)。
      猜你喜欢
      • 2017-03-17
      • 2015-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多