我有一个“搜索栏和搜索显示控制器”,在TableViewController中有一个表视图。
我正在尝试进行搜索,以便当用户在搜索框中输入文本时,会发出ajax请求并执行搜索并返回数据。这工作正常,但由于某种原因,搜索显示控制器表从未填充。
搜索显示控制器委托设置为故事板中的视图控制器,所有其他连接基于我一直尝试使用的教程,但我从未在搜索结果表中得到任何结果。
当我用数据填充初始表格然后单击搜索框(键盘和所有内容都显示出来)时,我可以看到背景中的原始表格显示为灰色。但是一旦我开始输入,它就会消失,并显示一个空白表。
我的numberOfRowsInSection和cellForRowAtIndexPath有时会被调用但是如果基表中没有数据则永远不会被调用(仅当我预先填充基表时)。但即使从搜索显示控制器内部的接缝调用这些接口并返回正确的值,该表也始终为空。
我的视图控制器代码是:
#import "SearchController.h"
static const NSString * LOG_KEY = @"SearchController";
@interface SearchController ()
@end
@implementation SearchController
- (void)viewDidLoad
{
[super viewDidLoad];
self.searchLocations = [SearchLocations getInstance];
}
- (void)viewDidAppear:(BOOL)animated
{
//doesn't seam to be working
//[self.searchBar becomeFirstResponder];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/* Data source table */
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
NSLog(@"rows in table: %u", [self.searchLocations.locations count]);
// Return the number of rows in the section.
return [self.searchLocations.locations count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"%@ new cell", LOG_KEY);
SearchLocationCell * cell = (SearchLocationCell *)[tableView dequeueReusableCellWithIdentifier:@"searchLocationCell"];
if (cell == nil) {
cell = [[SearchLocationCell alloc] init];
}
cell.nameLabel.text = [self.searchLocations getLocationValue:@"name" forIndex:indexPath.row];
return cell;
}
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
}
/* Search bar methods */
- (BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString
{
NSLog(@"%@ should reload table for string: %@", LOG_KEY, searchString);
return YES;
}
- (void)searchDisplayController:(UISearchDisplayController *)controller didLoadSearchResultsTableView:(UITableView *)tableView
{
NSLog(@"%@ didLoadSearchResultsTableView", LOG_KEY);
}
- (void)searchBar:(UISearchBar *)searchBar textDidChange:(NSString *)searchText
{
//we need at least 3 chars to search
if ([searchText length] > 2)
{
[self.searchLocations getSearchResultsForString:searchText isFullSearchTerm:NO withCallback:self];
}
}
- (void)searchBarCancelButtonClicked:(UISearchBar *)searchBar
{
}
/* SearchProtocol methods */
- (void)resultsLoaded
{
NSLog(@"%@ resultsLoaded", LOG_KEY);
//[self.tableView reloadData];
}
- (void)searchError
{
NSLog(@"%@ searchError", LOG_KEY);
}
- (void)viewDidUnload
{
[self setSearchBar:nil];
[self setSearchBar:nil];
[self setSearchBar:nil];
[super viewDidUnload];
}
@end
填写搜索显示控制器表时我缺少什么?