iOS如何实现下拉列表以及如何关闭它?

Posted

技术标签:

【中文标题】iOS如何实现下拉列表以及如何关闭它?【英文标题】:iOS how to implement a drop down list and how to take care of closing it? 【发布时间】:2012-03-12 17:59:38 【问题描述】:

我需要一些关于如何在 ios 中实现下拉列表类功能的意见。

我想到了一些解决方案,例如使用UITableView 来显示文本项列表。 (在我的情况下,列表可以是静态的也可以是动态的,所以 UITableView 似乎是我的情况的一个不错的选择)。但我无法弄清楚的一件事是如何关闭下拉菜单......

假设在视图的某处打开了这个下拉列表(假设这个视图占据了整个屏幕)。当我点击视图中的其他位置时,下拉菜单一旦打开,应该会被关闭(关闭),就像典型下拉菜单在桌面环境中的工作方式一样。我该怎么做?

一种方法是在视图上收听touchesBegan 事件并查看下拉菜单是否打开 - 这很好,但问题是如果我有按钮之类的东西,当用户点击其中一个时我没有收到视图上的touchesBegan 输入。

我该如何以通用方式解决这个问题?

【问题讨论】:

我会研究 UIPopOverViewController,它完全符合您的需求,我不确定,但它可能仅适用于 iPad。 UIPickerViewController 是在这种情况下应该使用的。下拉菜单在 iPhone 上是没有位置的。这是一部 iPhone,而不是台式电脑。 使用这个github.com/satishazad/SAMenuDropDown 【参考方案1】:

下拉列表通常在 iOS 中使用 UIPickerView 实现。选择器视图可以设置为文本字段的输入视图,它将按住下拉菜单,然后以与键盘相同的方式在屏幕上和屏幕外进行动画处理。

您通常还需要一个 UIToolbar,其中包含一个“完成”按钮作为输入附件视图,它显示在选择器上方,如果您没有自动执行选择,则允许您在做出选择后关闭。

您可以通过选择器视图委托方法或完成按钮的操作方法向文本字段发送resignFirstResponder 来移除选择器。

您将工具栏创建为附件视图,如下所示:

accessoryView = [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];
accessoryView.barStyle = UIBarStyleBlackTranslucent;

UIBarButtonItem *space = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];

UIBarButtonItem *done = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(doneTapped:)];

accessoryView.items = [NSArray arrayWithObjects:space,done, nil];

textField.inputAccessoryView = accessoryView;

这将在右侧为您提供一个“完成”按钮,该按钮连接到名为 doneTapped 的操作方法:

【讨论】:

您好 jrturton,感谢您的回答。对于实现下拉列表功能非常有用。我创建了选择器视图并指定为 textfiedl 的输入视图。它工作正常,但我无法解雇pickeview。你提到我需要使用 UIToolbar 持有一个完成按钮,但我不知道如何做到这一点。请您举个简单的例子。【参考方案2】:

试试这个。它可能会有所帮助。

1) Add the UITableView on a transparent UIView. 
2) The UIView should have the same size as the display screen.
3) The UITableView shall take the same small size you have.
4) Implement the touches method as you mentioned for the holding UIView.

【讨论】:

【参考方案3】:

首先,如果你在 iPad 上,UIPopoverViewController 就是专门为此设计的。如果您需要更多自定义的东西,我总是在下拉菜单下方隐藏一个不可见的全屏大小的按钮。它覆盖整个屏幕,当被触摸或下拉菜单消失时,它会隐藏自己。超级简单。

【讨论】:

【参考方案4】:

我发现 github 上的这个项目很有用。 https://github.com/kmdarshan/dropdown

【讨论】:

【参考方案5】:

我为 iOS 创建了一个下拉控件。您可以从下面的 URL 中查看它

https://github.com/iVishal/VSDropdown

【讨论】:

以上是关于iOS如何实现下拉列表以及如何关闭它?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 IOS 6.0(Iphone) 中通过 jquery 为混合应用程序关闭选择器的 onchange 事件下拉列表

如何在外部点击时关闭下拉菜单?

如何在 iOS 中为 UISearchBar 设置最近的搜索历史下拉列表

我如何使用javascript下拉列表中的输出? [关闭]

ios过滤选项类似于苹果商店(下拉列表)

单击任意位置时如何关闭下拉列表