使用Storyboard动态原型TableViewCell for SearchDisplayController结果

时间:2014-01-31 07:03:08

标签: ios objective-c uitableview

我正在尝试使用Storyboard Prototype Cell来使用UISearchBar显示搜索结果的内容。我的常规Prototype Cell(当不搜索时)看起来很好,但是,当我搜索时出现以下错误:我用来过滤结果的数组正在填充......

-[UISearchResultsTableView _configureCellForDisplay:forIndexPath:], /SourceCache/UIKit/UIKit-2903.23/UITableView.m:
my-App*** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'

创建单元格

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell;

    if (cell == nil) {
       cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    }


    if (tableView == self.searchDisplayController.searchResultsTableView) { 
        UILabel *name = (UILabel *)[cell viewWithTag:101];
        name.text = @"test";
    } else {
       UILabel *name = (UILabel *)[cell viewWithTag:101];
        if (_messages.count == 0)
            name.text = @"No Messages";
        else
            name.text = @"username";
    }


    return cell;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    if (tableView == self.searchDisplayController.searchResultsTableView)
        return [_searchResults count];
    else {
            return _messages.count;
    }
}

2 个答案:

答案 0 :(得分:1)

这不起作用,因为表视图单元格仅注册到主表视图。这不适用于您的搜索结果控制器表视图,因为故事板将允许这样做。

使用:

  

[tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

而不是

  

cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];

是的,您可以为搜索表视图注册该类,

  

[self.searchDisplayController.searchResultsTableView registerClass:[Cell class] forCellReuseIdentifier:CellIdentifier];

但是,这不会包含您在故事板中自定义单元格中设计的任何内容。您必须以编程方式创建所有内容。

除此之外,您可以通过将当前单元格复制到其中来创建nib文件。并像这样注册。

[self.searchDisplayController.searchResultsTableView registerNib:[UINib nibWithNibName:@"searchCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:CellIdentifier]; 

答案 1 :(得分:0)

您是否注册了nib文件

[self.searchDisplayController.searchResultsTableView registerClass:[Cell class] forCellReuseIdentifier:CellIdentifier];