1

ユーザーが検索を開始する前に、検索ディスプレイ コントローラーのテーブル ビューにデータ ソース内のすべてのデータをロードしたいと考えています。

使った

[self.searchDisplayController.searchResultsTableView reloadData];

viewDidLoad ではなく、UITableViewDataSource デリゲート メソッド

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath

呼び出されません。私のテーブルは空のままです。テーブル ビューをリロードする前にデータ ソースを手動で入力した(デバッグ モードでこれを確認した) ため、セルに入力するデータがあります。

別のテーブル ビューを使用してこれを実行し、視覚的にまったく同じ結果を得ることができることはわかっていますが、検索ディスプレイ コントローラーのテーブル ビューのみを使用できるかどうかを知りたいです。

コード:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell;

    static NSString *cellIdentifier = @"Cell";

    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];

    if(cell == nil) {

        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
    }


    NSString *category = [searchResults objectAtIndex:[indexPath row]];
    cell.textLabel.text = category;

    cell.textLabel.font = [UIFont systemFontOfSize:14];
    cell.textLabel.numberOfLines = 0;
    cell.textLabel.lineBreakMode = NSLineBreakByWordWrapping;


    return cell;
}
4

2 に答える 2

1

この SO questionを見たいと思うかもしれません。しかし、それを試したことはありません。

それが役に立ったかどうか教えてください;-)

編集 :

あなたのコメントの後、私は答えを試しましたが、うまくいきました(彼が答えで言っているように、まだ薄暗いビューが表示されますが、削除しようとしませんでした)。

私のアプリケーションで試したコードは次のとおりです。

- (void)viewDidLoad {
    [super viewDidLoad];
    _places = @[ [[RHPlace alloc] initWithName:@"name" address:nil distance:nil andFoursquareUID:@"plop"] ];
    [self.searchDisplayController.searchResultsTableView reloadData];
    CGRect testFrame = CGRectMake(0, 20, self.searchDisplayController.searchBar.frame.size.width, 100);
    self.searchDisplayController.searchResultsTableView.frame = testFrame;
    [self.searchDisplayController.searchBar.superview addSubview:self.searchDisplayController.searchResultsTableView];
}

そして、これが私が得た結果です: http://cl.ly/image/0k0V3J3H1G1h

したがって、うまくいかない場合は、別のバグがあると思います。

于 2013-08-07T06:41:26.207 に答える
0

デリゲートメソッド中に「searchResults」配列にデータを追加する可能性があります...

-(BOOL)searchDisplayController:(UISearchDisplayController *)controller shouldReloadTableForSearchString:(NSString *)searchString

あなたの場合、検索なしで検索ディスプレイコントローラーのテーブルビューにデータ全体が必要であり、デリゲートメソッドの上で呼び出されず、配列にデータがない可能性があります...したがって、検索ディスプレイコントローラーのテーブルビューをリロードする前に、「searchResults」配列にデータを追加する必要があります.

[self.searchDisplayController.searchResultsTableView reloadData];
于 2013-08-07T05:59:05.610 に答える