以编程方式将搜索栏和 UISearchDisplayController 添加到 UITableView

Posted

技术标签:

【中文标题】以编程方式将搜索栏和 UISearchDisplayController 添加到 UITableView【英文标题】:Adding a UISearchBar and UISearchDisplayController to a UITableView programatically 【发布时间】:2013-10-01 07:59:54 【问题描述】:

请原谅我对这个问题的无知,但我仍在努力掌握基础知识,并且已经为此苦苦挣扎了几天。

我基本上有一个NSArray,我用它来填充一个UITableView,我希望用户能够搜索它——它会在用户键入时过滤包含搜索条件中的字符的结果.

有很多教程用于连接 UITableViewsUISearchDisplayControllers,但它们都使用 xib 文件,我想以编程方式添加所有内容

我有UITableView,当用户点击按钮时,其内容显示在UIView 中,我似乎在同一视图的顶部添加了UISearchBar,我认为' 我添加了一个UISearchDisplayController。但是,我似乎无法让这三个人都玩得很好。

这是我目前所拥有的

- (IBAction)createSearchList:(id)sender 

//Make the list
AAPjsonParse * makeTheFullList = [[AAPjsonParse alloc] init];    
fullListOfRecipesForTableView = [makeTheFullList generateFullListOfRecipes];
fullListForSearchResultsInTableView = fullListOfRecipesForTableView;
recipeListForTable = [fullListForSearchResultsInTableView allKeys];
recipeListForTable = [recipeListForTable sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];


//Create the UITableView
tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 44, 300, 724) style:UITableViewStylePlain];
tableView.dataSource = self;
tableView.delegate = self;

//Add the TableView to the view
[self.searchView addSubview:tableView];

//Create a UISearchBar for the TableView

UISearchBar * searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 300, 44)];
//Set the searchBar as the delegate
searchBar.delegate = self;
//Add the searchBar to the UITableView
[self.searchView addSubview:searchBar];

//Create the searchViewController
UISearchDisplayController * searchController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
//Set the dataSource for the search as self
searchController.searchResultsDataSource = self;
//Set the results delegate as self – this is the view that's overlaid onto the full listing view (I think?)
searchController.delegate = self;



-(NSInteger) numberOfSectionsInTableView:(UITableView *)tableView 
return 1;


-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section 
return [recipeListForTable count];


-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
static NSString * CellIdentifier = @"RecipeCell";

UITableViewCell * cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

if (cell == nil) 
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];


NSString * cellTitle = [recipeListForTable objectAtIndex:indexPath.row];

cell.textLabel.text = cellTitle;

return cell;

我的实现文件顶部还有一些东西来存储各种位

    
NSArray * recipeListForTable;
NSMutableArray * recipeListForSearch;
int selectedRecipeIndex;

NSDictionary * fullListOfRecipesForTableView;
NSMutableDictionary * fullListForSearchResultsInTableView;

UITableView * tableView;

【问题讨论】:

How do I use the UISearchBar and UISearchDisplayController的可能重复 【参考方案1】:

此代码将向您的tableview 添加一个搜索栏

  searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, CGRectGetWidth(self.tblView.frame), 44)];
        searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
        searchBar.autocorrectionType = UITextAutocorrectionTypeNo;
       // searchBar.tintColor = [UIColor lightGrayColor];



    searchBar.placeholder = @"What are you eating today...";
    searchBar.delegate = self;
    searchBar.searchBarStyle = UISearchBarStyleMinimal;

    searchDisplayController.delegate = self;
    searchDisplayController.searchResultsDataSource = self;

       [self.tblView setTableHeaderView:searchBar];

添加搜索栏后检查如何传递数据并设置delegatedatasource, 我建议你通过这个Tutorial。

【讨论】:

以上是关于以编程方式将搜索栏和 UISearchDisplayController 添加到 UITableView的主要内容,如果未能解决你的问题,请参考以下文章

在横向模式下,搜索栏和表格视图不适合屏幕

如何以编程方式将视图控制器嵌入到导航视图控制器中

如何以编程方式将搜索查询注入 Select2 v4?

iOS 状态栏和 UIView

Ace:以编程方式打开搜索/替换框

以编程方式读取 PDF 嵌入式搜索索引