我正在尝试使用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;
}
}
答案 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];