如何将UISearchBar与包含section的tableView一起使用

时间:2011-05-02 23:00:32

标签: iphone uitableview uisearchbar reload

好的,我正在研究在包含部分的tableView上实现UISearchBar。这可能是错的,但是为了第一次填充表视图,我有一个包含大量条目的数组,然后填充这样的部分:

if(indexPath.section ==0){

            [cell.textLabel setText:[tableData objectAtIndex:indexPath.row]];                   
    }else if(indexPath.section ==1){

            [cell.textLabel setText:[tableData objectAtIndex:indexPath.row+4]];                     
    }else if(indexPath.section ==2){

            [cell.textLabel setText:[tableData objectAtIndex:indexPath.row+8]];                     
    }

这远非优雅,但它有效。现在我正在尝试连接UISearchBar,这是我遇到问题的方法:

   - (void)searchBar:(UISearchBar *)sBar textDidChange:(NSString *)searchText
    {
[tableData removeAllObjects];// remove all data that belongs to previous search
if([searchText isEqualToString:@""] || searchText==nil){
    [tableView reloadData];
    return;
}
NSInteger counter = 0;
for(NSString *name in dataSource)
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    NSRange r = [name rangeOfString:searchText];
    if(r.location != NSNotFound)
    {

            [tableData addObject:name];

    }

    [pool release];
}

[tableView reloadData];
  }

所以我再次创建一个符合搜索条件的条目数组,但是当我尝试重新加载我的tableView时,它会因为期待各个部分而被搞砸。但我想要的只是一个简单的无节目tableView的结果。

如何使用带有节的tableView实现此UISearchBar?

由于

2 个答案:

答案 0 :(得分:0)

在您输入搜索时设置BOOL并相应地调整您的部分计数

e.g。

在viewDidLoad

 BOOL isSearching = NO;
输入textDidChange方法时

设置为YES。

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    int t;
if (isSearching) t = 1
else {
t=  array.count;
}
return t;
}

答案 1 :(得分:0)

你不需要保留另一个变量;只是询问tableView参数,看看谁在询问部分的数量。例如,假设您的数据在fetchedResultsController

中可用
   if (tableView == self.searchDisplayDisplayController.searchResultsTableView) {
      // your table is the search results table, so just return 1
      return 1;
   } else {
      // your table is your "own" table
      return [[self.fetchedResultsController sections] count];
   }

我在许多表视图委托和数据源方法中做了同样的事情。