我需要一些关于如何在 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/