在android中,如果我希望用户从大型列表中选择一些内容(100多个项目),我通常会做类似这样的事情,用户输入类似自动完成的内容。
我想在iOS上做类似的事情,但我找不到像我在android上的下拉菜单那样的东西。我意识到我可以在顶部的搜索栏和下面的表格视图,但我下面有更多的文本字段。
有拾音器,但如果列表中有这么多项目,它们并不是一个好的选择
我一直试图找到一种方法来使用像https://harvesthq.github.io/chosen/之类的东西,但我是Xcode和iOS的新手。
答案 0 :(得分:2)
我已经尝试过你的问题并得到了解决方案。尝试使用UISearchBar和Table视图 最初,表格视图将被隐藏,并且当用户键入搜索栏中的委托方法时,将会调用该表格并显示表格视图。
用户界面应包含:
正确连接数据源和委托方法
#import "ViewController.h"
@interface ViewController ()
@property (weak, nonatomic) IBOutlet UISearchBar *searchbar;
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (nonatomic, strong) NSArray *orgData;
@property (nonatomic, strong) NSArray *data;
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.orgData = @[@"New York, NY", @"Los Angeles, CA", @"Chicago, IL", @"Houston, TX",
@"Philadelphia, PA", @"Phoenix, AZ", @"San Diego, CA", @"San Antonio, TX",
@"Dallas, TX", @"Detroit, MI", @"San Jose, CA", @"Indianapolis, IN",
@"Jacksonville, FL", @"San Francisco, CA", @"Columbus, OH", @"Austin, TX",
@"Memphis, TN", @"Baltimore, MD", @"Charlotte, ND", @"Fort Worth, TX"];
self.data = self.orgData;
[self.tableView setHidden:YES];
}
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
return 1;
}
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
return self.data.count;
}
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"cell"];
cell.textLabel.text = self.data[indexPath.row];
return cell;
}
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
self.searchbar.text = self.data[indexPath.row];
[self.tableView setHidden:YES];
}
-(BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
[self.tableView setHidden:NO];
return YES;
}
-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
[self.tableView setHidden:NO];
self.data = ([searchText isEqualToString:@""])? self.orgData : [self filterArrayUsingSearchText:searchText];
[self.tableView reloadData];
}
-(NSArray *) filterArrayUsingSearchText:(NSString*) searchText
{
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"SELF contains[cd] %@",
searchText];
return [self.orgData filteredArrayUsingPredicate:resultPredicate];
}
答案 1 :(得分:0)
我认为可以使用拣货员,但不能这样。
您是否尝试过textField但是为您的选择器更改了它的inputView?
它会打开拾取器而不是键盘。到目前为止,这是我提出的最好的方法(因为没有原生等效的下拉菜单,你可以把它变成你自己的...)