好的,我正在研究在包含部分的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?
由于
答案 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];
}
我在许多表视图委托和数据源方法中做了同样的事情。