如何在uitableview中添加搜索栏?

Posted

技术标签:

【中文标题】如何在uitableview中添加搜索栏?【英文标题】:how to add searchbar in uitableview? 【发布时间】:2011-04-04 12:21:08 【问题描述】:

我有一个NSMutableArray 显示在UITableView 中,我在那里添加了一些元素。

例如,元素名称为 First、FirstTwo、Second、SecondTwo、Third、ThirdTwo。

现在我想在屏幕上添加一个搜索栏。当我在那个搜索栏中输入 F 时,表格应该只显示 First 和 FirstTwo。

我应该怎么做?

【问题讨论】:

你可以使用 UISearchController 代替。 raywenderlich.com/113772/uisearchcontroller-tutorial 【参考方案1】:
 searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, 0, 320, 44)];

 searchBar.delegate = self;

 self.tableView.tableHeaderView = searchBar;

【讨论】:

【参考方案2】:

掌握这个窍门的最佳方法是遵循教程 over here over here。 您正在寻找的部分是:

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

   [tableData removeAllObjects];// remove all data that belongs to previous search
   if([searchText isEqualToString:@""]searchText==nil)
      [myTableView reloadData];
      return;
   

   NSInteger counter = 0;
   for(NSString *name in dataSource)
   
      NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
      NSRange r = [name rangeOfString:searchText];
      if(r.location != NSNotFound)
      
         if(r.location== 0)//that is we are checking only the start of the names.
         
            [tableData addObject:name];
         
      

      counter++;
      [pool release];

   

   [myTableView reloadData];

【讨论】:

我想要来自网络服务的数据。我可以使用相同的代码吗?感谢您的链接。【参考方案3】:

如果您使用的是搜索栏。然后您可以使用搜索栏的委托方法搜索您的表格视图的包含

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

// myArray is main array for Table View
// tempMainArray which store myArray Data

myArray = [[NSMutableArray alloc]initWithArray:tempMainArray];
NSMutableArray *searchArray = [[NSMutableArray alloc]init];


[searchArray removeAllObjects];// remove all data that belongs to previous search
if([searchText isEqualToString:@""]|| searchText==nil)

    [myArray removeAllObjects];
    myArray =  tempMainArray;
    [_objTableView reloadData];

    return;


NSInteger counter = 0;
for(NSString *name in myArray)


    NSRange r = [name rangeOfString:searchText];
    if(r.location != NSNotFound)
    
        if(r.location== 0)//that is we are checking only the start of the names dynamicaly.
        
            [searchArray addObject:name];
        
    

    counter++;




if (searchArray.count > 0) 

    [myArray removeAllObjects];
     myArray =  searchArray;
    [_objTableView reloadData];

else

    [myArray removeAllObjects];
    myArray =  tempMainArray;
    [_objTableView reloadData];



【讨论】:

【参考方案4】:

我自己做的,效果很好。

声明两个可变数组。一个包含所有数据,第二个用于存储过滤后的数据。这里 searchuser 是搜索栏出口。 aray 是存储所有数据的主数组。将搜索栏的大写属性设置为句子,这样它就可以正常工作。

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

    [searchuser.text lowercaseString]);
    filteredarray=[[NSMutableArray alloc]init];
    int l=(int)[searchuser.text length];
    if (l>0)
    
        NSMutableString * data=[[NSMutableString alloc]init];
        int a=(int)[aray count];

        for (int i=0;i<=a-1;i++)
        
            data=[aray objectAtIndex:i];
            if ([searchuser.text isEqualToString:data])
            
                [filteredarray addObject:data];
            
            if ([data length]>l)
            
                NSMutableString * string=[[NSMutableString alloc]initWithString:[data substringWithRange:NSMakeRange(0, l)]];

                if ([searchuser.text isEqualToString:string])
                
                    [filteredarray addObject:data];

                
            
        
    
    else
    
        filteredarray=aray;
    
    [tableview reloadData];

【讨论】:

以上是关于如何在uitableview中添加搜索栏?的主要内容,如果未能解决你的问题,请参考以下文章

编辑搜索栏时将 UITableView 添加到子视图

如何在 UITableview 的标题中向 UISearchBar 添加按钮?

如何在 UISplitViewController 的导航栏下方添加搜索栏?

领域对象的 UITableView 中的搜索栏

更改 UITableView 中的搜索栏高度(swift 5)

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