iOS有下拉菜单或下拉列表吗?

25

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

是否有适用于iOS的下拉菜单或下拉选项菜单可用?

谢谢。


1
在Cocoa Controls上至少有一个,这里是链接:http://cocoacontrols.com/platforms/ios/controls/kspopoverview - Luke
这些答案已经过时了。iOS现在有菜单了。请查看UIMenu。 - w0mbat
11个回答

17

并没有在iOS SDK中提供这种元素,这也是有充分理由的 - 这些元素在触摸屏上的设计不够美观、时尚和易用。

考虑使用UIPickerViewUISegmentedControl

但如果您坚持要使用这种元素,请查看像Cocoa Controls这样的网站,那里提供了一些改良版的选择。其中一些实际上做得很好。


时至今日,情况已经发生了变化 - 主要是由于屏幕面积大大增加。现在我们有UIMenu


2
完全同意这里的观点,刚刚阅读了HIG,因为它实际上并不可用,所以不存在这样的事情。 - rckoenes
4
老实说,我发现 iPad 上 iOS 版本的 HTML <select> 元素比 UIPickerView 更紧凑、更易用。可惜我们不能使用它们,虽然它们实际上是在 Safari 中实现的。 - Darrrrrren
35
“-1” 是针对声称“不够漂亮、时髦、实用”的说法。这只是你的个人观点。很多 iOS 应用程序有设计精美且易于使用的下拉菜单,比如 Vine 应用程序。 - eric
8
你们太疯狂了,有成百上千的应用程序成功地使用“下拉显示”方式。实际上,我认为这种交互比“滑动删除”更加被人们认可。你用过苹果的通知中心吗? - Ryan Romanchuk
3
我希望苹果未来的 iOS 版本能够考虑增加类似 HTML 的 <select> 支持。目前的选项并不方便。我不想每次需要这种 UI 元素时都要自己创建弹出窗口。 - Greg Brown
显示剩余3条评论

10
你可能想要查看讨论过的 PullableView 视图,可以在此处查看
下面是一个带有可从顶部、底部和左侧拉出视图的示例图片。底部的视图已经打开。 示例应用程序

10

iOS 14+

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

这里是指南链接:https://developer.apple.com/design/human-interface-guidelines/components/menus-and-actions/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/

我无法呈现下拉菜单。 - SHAH MD IMRAN HOSSAIN

8

3
我同意苹果选择器(UIPickerView)很糟糕。在我看来,它太大、笨重,而且很难进行样式设计。它可能在 iPhone 还是新奇玩意时看起来还算可爱和引人注目,但记住,它只是一个表单控件。表单控件不是主角,不应该占据太多屏幕空间。依我之见。 - eric

6
我认为使用“下拉菜单”并不是什么大问题,只要它足够大就可以使用。我制作了一个使用表格视图的下拉菜单,它比默认选择器更快、更易用,而且视觉上更加友好。每次看到那些默认选择器都让我感到不舒服,它们看起来很糟糕,而且使用起来太慢了。这其实并不需要太多的代码,我不确定为什么更多的人不使用它们。
基本上你需要做的是制作一个看起来像下拉菜单的按钮,然后在激活按钮时将其激活并滑入一个表格视图。按照正常的委托方法来处理项目选择,然后再将其滑回去。
只需确保将表格视图放在其他所有元素的前面,这样它就不会被其他元素剪切或隐藏。
当然,这取决于你选择的内容,仍有一些地方我不确定如何避免使用选择器。

不要把表格视图放在所有其他内容的前面,而是将其缩小,以便您可以看到背景,然后使其变灰。好处:如果您想回去,您不需要返回按钮-您可以点击“小”表格视图之外以返回。这比一个隐藏所有内容的巨大表格视图更好,特别是对于iPhone 5(小手指看不到返回按钮)和iPad mini而言,更加直观。 - brainray
他的意图并不是在屏幕上隐藏所有内容,而是简单地将其分层,以便不被其他视图覆盖。 - golddove

3

动作表单基本上就是一个下拉列表,如果你这样想的话。如果你不断地向UIActionSheet添加按钮,它最终会变成一个表格。所以只要让你的按钮调用UIActionSheet即可。

尝试向UIActionSheet添加7个或更多按钮,看它如何变成一个列表。这很方便。这张图片可以用来演示我所说的:

enter image description here


1
我认为操作表不会保留选择状态(但我可能对此有所错误)。 - Greg Brown
这是一个好主意,当你只想向用户展示可供选择的选项时,比如导航项。谢谢兄弟。 - thekevshow

2
你可以在“弹出窗口”中放置一个表格视图。弹出窗口只适用于iPad。

enter image description here

正如我在上面评论的那样,这种结构可能是在触摸屏上最好的选择。 想想需要滚动的下拉菜单。默认浏览器的行为是单击打开菜单,第二次单击将选择并关闭菜单
-

但是,在触摸设备上您无法完全实现这一点,除非进行一些修改。因为触摸屏幕没有悬停功能,要滚动列表,您必须执行以下操作之一:
  • 添加滚动条或其他东西来防止意图滚动的触摸仅执行“选择和关闭”行为。滚动条与标准触摸屏界面不一致。
  • 需要某种按住行为才能执行选择和关闭行为,这很烦人,而且不符合标准。用户希望立即选择触摸,而不是按住它。
  • 或者在右上角放置一个OK按钮以关闭窗口,就像Apple在上面显示的弹出窗口中所做的那样。

请参见所有iOS控件


我不确定为什么使用滚动视图会有问题。事实上,UITableView 扩展了 UIScrollView,因此如果您使用表视图,应该可以免费获得此功能。而且 UITableView 知道如何区分滚动手势和选择手势。 - Greg Brown
他正在使用“下拉菜单或下拉菜单”,可能是为了节省空间。只要在UITableView中触摸元素不会选择和关闭UITableView,UITableView就知道如何区分滚动手势和选择手势。在触摸时展开的UITableView也可能有效。 - bobobobo
是的,我想象中的东西就像你所说的“触摸展开的表格视图” - 也就是类似于HTML中的下拉选择框。 - Greg Brown

2

建议使用KartikArora提供的tableview,并结合iPad上的popover controller。


一个在弹出控件中的UITableView可以完成任务,但如果苹果能够提供一个内置控件就更好了。它可以在iPad上使用弹出窗口,在iPhone/iPod Touch上推送一个新的顶层视图。 - Greg Brown

2

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接