我正在尝试将UISearchDisplayController和UISearchBar添加到我的UIViewController,UITableViewController添加了InterfaceBuilder,这是我的代码:
@interface MyClass () <UITableViewDataSource,UITableViewDelegate,UISearchBarDelegate, UISearchDisplayDelegate>
{
UISearchBar *searchBar;
UISearchDisplayController *searchDisplayController;
}
@property (weak, nonatomic) IBOutlet UITableView *tableView;
@end
@implementation MyClass
- (void)viewDidLoad
{
UINib *myCellNib = [UINib nibWithNibName:@"MyCell_iPhone" bundle:[NSBundle mainBundle]];
[self.tableView registerNib:myCellNib forCellReuseIdentifier:CellIdentifier];
[self.tableView setDataSource:self];
[self.tableView setDelegate:self];
[self.tableView setRowHeight:84];
[self.tableView setSectionHeaderHeight:45];
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0, -44 , 320, 44)];
searchBar.delegate = self;
[searchBar setBackgroundImage:[UIImage imageNamed:@"NavBar.png"]];
[self.view addSubview:searchBar];
searchDisplayController = [[UISearchDisplayController alloc] initWithSearchBar:searchBar contentsController:self];
searchDisplayController.delegate = self;
searchDisplayController.searchResultsDataSource = self;
searchDisplayController.searchResultsDelegate = self;
[searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern_bg"]]];
[searchDisplayController.searchResultsTableView setSeparatorColor:[UIColor clearColor]];
[searchDisplayController.searchResultsTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
[searchDisplayController.searchResultsTableView registerNib:myCellNib forCellReuseIdentifier:CellIdentifier];
[searchDisplayController.searchResultsTableView setRowHeight:84];
[searchDisplayController.searchResultsTableView setSectionHeaderHeight:0];
}
#pragma mark Content Filtering
-(void)filterContentForSearchText:(NSString*)searchText scope:(NSString*)scope {
// Update the filtered array based on the search text and scope.
// Remove all objects from the filtered search array
[self.filteredInfo removeAllObjects];
[self doLocalSearch:searchText];
}
#pragma mark - UISearchDisplayController Delegate Methods
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString {
// Tells the table data source to reload when text changes
[self filterContentForSearchText:searchString scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:[self.searchDisplayController.searchBar selectedScopeButtonIndex]]];
// Return YES to cause the search result table view to be reloaded.
return YES;
}
-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchScope:(NSInteger)searchOption {
// Tells the table data source to reload when scope bar selection changes
[self filterContentForSearchText:self.searchDisplayController.searchBar.text scope:
[[self.searchDisplayController.searchBar scopeButtonTitles] objectAtIndex:searchOption]];
// Return YES to cause the search result table view to be reloaded.
return YES;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
MyCell_iPhone *cell = (MyCell_iPhone *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (tableView == searchDisplayController.searchResultsTableView)
{
.....code to set information in cell
} else {
.....code to set information in cell
}
return cell;
}
我的主要UITableView工作得很好,而不是searchDisplayController.searchResultsTableView有这个问题,我第一次进行搜索一切顺利,我可以看到MyCustom Cell,我可以看到我在uitableview中插入的背景,所以一切正常,然后我按取消按钮关闭搜索我重新打开搜索视图,我再次搜索,我收到此错误:
*** Assertion failure in -[UISearchResultsTableView _configureCellForDisplay:forIndexPath:]
我插入了很多断点来查看问题所在,我在这里找到了:
MyCell_iPhone *cell = (MyCell_iPhone *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
在第二次搜索时值为nil,表视图丢失了它的背景,并返回经典的白色背景,并且崩溃,有什么问题?我重复我的主要uitableview工作完美...
答案 0 :(得分:2)
我必须在此委托方法中插入UISearchDisplayController表视图的自定义设置:
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
[searchDisplayController.searchResultsTableView setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"pattern_bg"]]];
[searchDisplayController.searchResultsTableView setSeparatorColor:[UIColor clearColor]];
[searchDisplayController.searchResultsTableView setSeparatorStyle:UITableViewCellSeparatorStyleNone];
UINib *myCellNib = [UINib nibWithNibName:@"MyCell_iPhone" bundle:[NSBundle mainBundle]];
[searchDisplayController.searchResultsTableView registerNib:myCellNib forCellReuseIdentifier:CellIdentifier];
[searchDisplayController.searchResultsTableView setRowHeight:84];
[searchDisplayController.searchResultsTableView setSectionHeaderHeight:0];
}