iOS - 搜索显示控制器未从视图控制器填充

时间:2013-02-27 19:09:22

标签: ios objective-c

我有一个“搜索栏和搜索显示控制器”,在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

填写搜索显示控制器表时我缺少什么?

0 个答案:

没有答案