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

标签 ios cocoa-touch uiview

我需要一些关于如何在 iOS 中实现下拉列表功能的输入。

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

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

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

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

最佳答案

下拉列表通常在 iOS 中使用 UIPickerView 实现。选择器 View 可以设置为文本字段的输入 View ,该文本字段将保留下拉菜单,然后以与键盘相同的方式在屏幕上和屏幕外动画。

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

您通过向文本字段发送 resignFirstResponder 来删除选择器,无论是从选择器 View 委托(delegate)方法还是完成按钮的操作方法。

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

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 的操作方法:

关于iOS 如何实现下拉列表以及如何关闭它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9672298/

相关文章:

ios - 圆形 View 上的阴影不均匀

ios - 重新排序 UIView subview

ios - UITextfield 委托(delegate)响应所有文本字段

ios - 在 iOS 9.2.1/XCode 7.2 中执行 segue 时偶尔出现黑屏

objective-c - 在 ReactiveCocoa 中观察的更好方法

objective-c - Objective-C 属性的默认属性是什么?

ios - libobjc.A.dylib 在 objc_msgSend :15 crash

ios - 影响 UIView 阴影的约束?

ios - 使可拖动的 UIButton 正确响应触摸事件

objective-c - Xcode 在整个屏幕上添加 subview 高于一切