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

时间:2012-03-12 17:59:38

标签: ios cocoa-touch uiview

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

我有一些解决方案,比如使用UITableView来显示文本项列表。 (在我的情况下,列表可以是静态的也可以是动态的,因此UITableView似乎是我案例的一个很好的选择)。但有一点我无法弄清楚是如何解雇下拉列表......

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

一种方法是在视图上收听touchesBegan事件并查看下拉列表是否已打开 - 这很好但问题是如果我有像按钮之类的东西,当用户点击其中一个然后我不知道t在视图上收到touchesBegan输入。

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

5 个答案:

答案 0 :(得分:19)

下拉列表通常使用UIPickerView在iOS中实现。拾取器视图可以设置为文本字段的输入视图,该视图将保持下拉,然后以与键盘相同的方式对屏幕进行动画打开和关闭。

您通常还需要一个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的操作方法:

答案 1 :(得分:3)

试一试。这可能有所帮助。

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.

答案 2 :(得分:2)

首先,如果你在iPad上,UIPopoverViewController就是为此设计的。如果您需要更多自定义内容,我总是会在下拉列表中取消隐藏全屏大小的按钮。它覆盖整个屏幕,当触摸或下拉消失时,它隐藏自己。超级简单。

答案 3 :(得分:2)

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

答案 4 :(得分:2)

我为iOS创建了一个下拉控件。您可以从以下网址查看

https://github.com/iVishal/VSDropdown