如何在表视图中添加搜索栏

时间:2014-10-28 14:53:44

标签: ios objective-c uitableview uisearchbar

实际上我在表格视图中存储了太多数据,现在我想轻松找到我的数据,所以我需要一个搜索栏。任何人都可以给我一点解决方案吗?

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    return [array count];
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *cellIdentifire = @"CellIdentifire";  
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifire];
    }
    cell.textLabel.text = [array objectAtIndex:indexPath.row];
    return cell;
}

1 个答案:

答案 0 :(得分:1)

请按照以下步骤操作:

  • 在表格视图标题上拖放搜索栏
  • 将搜索栏的代理设置为视图控制器

使用以下代码进行搜索:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar {
    [searchBar setShowsCancelButton:YES];
}

- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {

    //Remove all objects first.
    [self searchTerm:searchText];
}

- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar {
    NSLog(@"Cancel clicked");
    searchBar.text = @"";
    [searchBar resignFirstResponder];
    [searchBar setShowsCancelButton:NO];

    [self showAllData];// to show all data
}

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar {
    NSLog(@"Search Clicked");
    [searchBar setShowsCancelButton:NO];
    [searchBar resignFirstResponder];

    [self searchTerm:searchBar.text];
}

-(void)showAllData {
   //load all data in _tableViewDataSourceArray, and reload table
}

-(void)searchTerm : (NSString*)searchText
{
    if (searchText == nil) return;

    _tableViewDataSourceArray = //YOUR SEARCH LOGIC        
    [self.tableView reloadData];
}

修改 如果您想用代码创建搜索栏,请初始化搜索栏并将其作为表格视图的标题视图传递到内部

- (UIView *) tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section

不要忘记在

中返回视图高度
- (CGFloat) tableView:(UITableView *)tableView heightForHeaderInSection:(NSInteger)section