如何在IOS中为下拉菜单元素创建文本过滤器

时间:2016-07-10 04:53:18

标签: ios xcode swift user-interface

在android中,如果我希望用户从大型列表中选择一些内容(100多个项目),我通常会做类似这样的事情,用户输入类似自动完成的内容。

enter image description here enter image description here

我想在iOS上做类似的事情,但我找不到像我在android上的下拉菜单那样的东西。我意识到我可以在顶部的搜索栏和下面的表格视图,但我下面有更多的文本字段。

有拾音器,但如果列表中有这么多项目,它们并不是一个好的选择

我一直试图找到一种方法来使用像https://harvesthq.github.io/chosen/之类的东西,但我是Xcode和iOS的新手。

2 个答案:

答案 0 :(得分:2)

我已经尝试过你的问题并得到了解决方案。尝试使用UISearchBar和Table视图 最初,表格视图将被隐藏,并且当用户键入搜索栏中的委托方法时,将会调用该表格并显示表格视图。

用户界面应包含:

  1. 搜索栏(> iOS 8)
  2. 表格视图
  3. 正确连接数据源和委托方法

    #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?

它会打开拾取器而不是键盘。到目前为止,这是我提出的最好的方法(因为没有原生等效的下拉菜单,你可以把它变成你自己的...)