加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ios – 使用UISearchBar搜索表视图

发布时间:2020-12-14 18:06:20 所属栏目:百科 来源:网络整理
导读:我正在使用此代码搜索UItableView: -(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText {if(searchText.length == 0){ isFiltered = FALSE;}else{ isFiltered = TRUE; if (filteredTableData == nil) filteredTableData = [[
我正在使用此代码搜索UItableView:

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



if(searchText.length == 0)
{
    isFiltered = FALSE;
}
else
{
    isFiltered = TRUE;


    if (filteredTableData == nil)
       filteredTableData = [[NSMutableArray alloc] init];
    else 
        [filteredTableData removeAllObjects];

    for (NSString* string in self.itemArray)
    {
        NSRange nameRange = [string rangeOfString:searchBar.text options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
        if(nameRange.location != NSNotFound)
        {
            [filteredTableData addObject:string];
        }
    }
}
[tableView reloadData]; 
[self.tableView reloadSections:[NSIndexSet indexSetWithIndex:0] withRowAnimation:UITableViewRowAnimationFade];
}

一切正常,但如果我按下开始编辑时出现的取消按钮,我的列表不会回来,但搜索结果仍然存在.要显示列表,我必须开始输入,甚至是搜索栏中的单个字符,然后将其删除或按“x”查看所有列表.有办法阻止取消按钮吗?或者在按下时显示列表?

解决方法

实现 – (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
UISearchBar的委托方法.在那里添加所有对象(表中的初始对象)在filteredTableData数组和重载表中.

-(void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
    {       
        [filteredTableData removeAllObjects];
        [filteredTableData addObjectsFromArray:self.itemArray];
        [tableView reloadData];
    }

如果您使用它来为重新加载表选择数据源数组(在表视图数据源方法中),也不需要维护标志isFiltered.例如

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
   if(isFiltered) 
      return filteredTableData.count 
   else
      return self.itemArray.count
}

如果始终在filteredTableData数组中维护数据,则不需要执行此操作.你的方法看起来像 –

-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
      return filteredTableData.count 
}

最初在控制器的init或viewDidLoad方法中添加filteredTableData中的所有对象,并仅使用此数组来重新加载表.

因此,您的方法看起来像 –

-(void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
 {
     if(searchText.length == 0)
     {
         [filteredTableData removeAllObjects];
         [filteredTableData addObjectsFromArray:self.itemArray];
     }
     else
     {
        [filteredTableData removeAllObjects];

        for (NSString* string in self.itemArray)
        {
            NSRange nameRange = [string rangeOfString:searchBar.text options:(NSCaseInsensitiveSearch|NSDiacriticInsensitiveSearch)];
            if(nameRange.location != NSNotFound)
            {
                [filteredTableData addObject:string];
            }
        }
     }
     [tableView reloadData]; 
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读