【问题标题】:Any pull down or drop down menu for iOS?iOS的任何下拉菜单或下拉菜单?
【发布时间】:2012-01-14 02:34:53
【问题描述】:

在我的 iOS 应用程序中,我需要使用下拉菜单或下拉菜单。我不想使用操作表或选择器视图。

iOS 有下拉菜单吗?

谢谢。

【问题讨论】:

标签: iphone ios ipad


【解决方案1】:

不,iOS SDK 中没有这样的东西,这是有充分理由的 - 这些元素在触摸屏上操作时不够漂亮、时髦和可用。

考虑改用UIPickerViewUISegmentedControl

但是,如果您坚持,请查看 Cocoa Controls 之类的网站以获取某些衍生物。其中一些实际上做得很好。


多年以后,情况发生了变化 - 主要是由于屏幕空间的大幅增加。我们现在有UIMenu

【讨论】:

  • 完全同意这里,只是阅读HIG,没有这样的东西,因为它不是真的有用。
  • 老实说,我发现 iOS 版本的 HTML <select> 框比 UIPickerView 更紧凑和用户友好,至少在 iPad 上是这样。很遗憾我们无法使用它们,因为它们实际上是在 Safari 中实现的。
  • -1 声称“不够漂亮、时髦、可用”。这只是你自己的意见。大量的 iOS 应用程序都有精心设计和可用的下拉菜单——看看 Vine。
  • @rckoenes 你们疯了,实际上有 100 多个应用程序成功使用了“下拉显示”范式。事实上,我认为它比“滑动删除”更受认可你用过苹果的通知中心吗?
  • 我希望 Apple 可能会考虑在未来的 iOS 版本中添加对 HTML
【解决方案2】:

不,iOS SDK 中没有这样的东西,但您可以将表格视图用作下拉菜单 .. 为此,您必须解决 tableview 的框架并像下拉列表一样显示它..

【讨论】:

    【解决方案3】:

    按照 KartikArora 的建议使用 tableview,并结合 iPad 的 popover 控制器。

    【讨论】:

    • 弹出框控件中的 UITableView 可以完成工作,但如果 Apple 可以为此提供内置控件,那就太好了。它可以在 iPad 上使用弹出框并在 iPhone/iPod Touch 上推送新的顶级视图。
    【解决方案4】:

    我不同意下拉列表在 iPad 上一定不好。苹果采摘器太可怕了。但这完全取决于他们需要显示的数据类型和数量。

    我刚刚找到了这个下拉列表,它看起来/执行得非常好: http://blog.lemberg.co.uk/iphone-development/custom-dropdown-list/

    【讨论】:

    • +1 我同意苹果选择器(UIPickerView)是可怕的。在我看来,它太大、笨拙且难以设计。当 iphone 还是一个新奇事物时,它可能很可爱和华丽,但请记住它只是一个表单控件。表单控件不是节目的明星,也不应该获得那么多的屏幕空间。恕我直言
    【解决方案5】:

    您可能需要查看讨论过的 PullableView 视图 here

    这是一个示例图片,带有可从顶部、底部和左侧拉出的视图。 底部的那个已经打开了。

    【讨论】:

      【解决方案6】:

      我真的不明白使用“下拉菜单”有什么大不了的,只要它足够大就可以使用。我制作了一个使用表格视图的视图,它比默认选择器更快,更易于使用,并且视觉上的滥用更少。每次我看到其中一个默认选择器都会让我畏缩,它们看起来很糟糕,而且使用时间太长。真的不需要很多代码,我不知道为什么更多的人不使用它们。

      基本上,您要做的就是制作一个看起来像下拉菜单的按钮,然后激活它并在该按钮被激活时在表格视图中滑动。像往常一样实现常规委托方法来处理项目选择,然后再次将其滑出。

      只需确保将表格视图放在其他所有内容的前面,这样它就不会被其他元素剪裁或隐藏。

      这确实取决于您选择的内容,但仍有一些地方我不确定如何避免使用选择器。

      【讨论】:

      • 不,不要把表格视图放在其他所有东西的前面,而是把它变小,这样你就可以看到背景,然后变灰。好处:如果您想返回,则不需要返回按钮 - 您可以在小 tableview 的“外部”选项卡返回。这比隐藏所有内容的巨大 tableview 更好、更直观,尤其是在 iPhone 5(小手指无法获得返回按钮)和 iPad mini 上。
      • 他的意图不是隐藏屏幕上的所有内容,而是简单地将其分层,使其不会被其他视图覆盖。
      【解决方案7】:

      如果您考虑一下,操作表基本上就是一个下拉列表。如果你继续向 UIActionSheet 添加按钮,它最终会变成一个表格。因此,只需让您的按钮调用 UIActionSheet。

      尝试将 7 个或更多按钮添加到 UIActionSheet 并观察它变成一个列表。它方便。这张照片可以用来演示我的意思:

      【讨论】:

      • 我认为操作表不会保留选择状态(但我可能错了)。
      • 当只是想向用户展示从导航项中选择的选项时,这是一个好主意。谢谢兄弟。
      【解决方案8】:

      您可以将 tableview 放在“popover”中。 Popover 仅适用于 iPad。

      正如我在上面评论的那样,这种结构可能是您在触摸屏上能做到的最好的。 Think about a dropdown that requires scrolling。默认浏览器行为是单击一次打开菜单,第二次单击同时选择和关闭菜单

      -
      

      但您不能完全在触摸设备上使用它,除非进行一些修改。因为触摸屏没有悬停功能,要滚动列表,您必须:

      • 添加滚动条,或其他东西来防止意味着滚动的触摸只是执行“选择并关闭”行为。滚动条与标准触摸屏界面不一致。
      • 需要某种“按住不放”行为来执行选择和关闭行为,这既烦人又不标准。用户希望触摸可以立即选择,而不是必须按住。
      • 或者在右上角放一个 OK 按钮来关闭窗口,就像 Apple 在上面显示的 Popover 中所做的那样。

      all iOS controls here

      【讨论】:

      • 我不确定为什么使用滚动视图会不好。事实上,UITableView 扩展了 UIScrollView,所以如果你使用 table view,你应该免费获得它。 UITableView 知道如何区分滚动手势和选择手势。
      • 嗯,他正在使用“下拉或下拉菜单”,大概是为了节省空间。 UITableView 知道如何区分滚动手势和选择手势,只要触摸 in UITableView 的元素不会选择并关闭 UITableView。 在触摸时扩展的 UITableView 也可以工作。
      • 是的,我想像您的“触摸时扩展的表格视图”之类的东西 - 即 HTML 中的下拉选择之类的东西。
      【解决方案9】:

      也许你想要一个弹出框..

      WYPopoverController

      https://github.com/nicolaschengdev/WYPopoverController

      【讨论】:

        【解决方案10】:

        我知道我可能迟到了 9 年才能回答这个问题,但 iOS 现在有一个下拉菜单: https://developer.apple.com/design/human-interface-guidelines/ios/controls/pull-down-menus/

        也许你只是领先于你的时代......

        【讨论】:

          【解决方案11】:

          iOS 14 中引入了下拉菜单。在 iOS 15 之后,它们被重命名为下拉按钮。

          这里是指南的链接:https://developer.apple.com/design/human-interface-guidelines/ios/controls/buttons/#pull-down-buttons

          要从导航栏创建一个简单的下拉菜单,请在代码或情节提要中添加一个栏底部项目,然后在 viewDidLoad 中调用它以创建一个简单的菜单:

          func setupMenu() {
              let add = UIAction(title: "Add", image: UIImage(systemName: "plus")) { (action) in
                  print("Add")
              }
              let edit = UIAction(title: "Edit", image: UIImage(systemName: "pencil")) { (action) in
                  print("Edit")
              }
              let delete = UIAction(title: "Delete", image: UIImage(systemName: "minus"), attributes: .destructive) { (action) in
                  print("Delete")
              }
           
              let menu = UIMenu(title: "Menu", children: [add, edit, delete])
              barItem.menu = menu
          }
          

          您可以在本指南中找到更多详细信息: https://www.appcoda.com/colorpicker-datepicker/

          【讨论】:

          • 我无法显示下拉菜单
          猜你喜欢
          • 2018-01-27
          • 2015-08-08
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-16
          • 2019-12-05
          • 2021-10-14
          相关资源
          最近更新 更多