我正在使用UISearchDisplayController来显示基于自服务器获取的某些数据的带有自定义单元格的表。

首先,我在UIViewController中设置UISearchDisplayController。

self.searchController = [[UISearchDisplayController alloc]
                             initWithSearchBar:self.mySearchBar contentsController:self];
        self.searchController.delegate = self;
        self.searchController.searchResultsDataSource = self;
        self.searchController.searchResultsDelegate = self;


我的UIViewController还实现了UISearchBarDelegate,因此我可以确定何时开始搜索。我设置了一个块,以便在我的api调用返回时被调用,并将结果字典保存在self.searchResults属性中:

- (void)searchBarSearchButtonClicked:(UISearchBar *)searchBar
{
    // here we make the api call
    [api getSomeInfo:searchBar.text complete:^(NSDictionary *json) {

        self.searchResults = json;
        [self.searchController.searchResultsTableView reloadData];
    }];
}


现在,我遇到的问题是在UITableViewDataSource方法中返回自定义单元格的位置。我的单元已实例化,但它的IBOutlets从未初始化,因此我无法正确设置其内容(文本,图像等):

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if (tableView == self.searchController.searchResultsTableView) {

        cell = [tableView dequeueReusableCellWithIdentifier:@"SearchResultsCellIndentifier"];

        if (cell == nil) {
            cell = [[SearchResultsCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
        }

        cell.customLabel.text = [self.searchResults objectForKey:@"customText"];  // cell exists but cell.customLabel is nil!!
    }

}


为什么内容为零?我的“自定义单元格”类中是否应该设置内容?

谢谢!

最佳答案

我认为您的问题是在创建单元格时使用了变量cellIdentifier,但是在出队时使用了字符串常量。

简单地总是重新创建一个单元是可以的,但是根本没有效率,并且会导致大量内存泄漏。

您应该首先根据所处的表视图以及所需的单元格类型设置cellIdentifier,然后使用该cellIdentifier出队,然后根据需要创建一个新的cellIdentifier。

09-30 14:25