在我的tableview中有我从UITableViewCell类初始化的自定义单元格。我有第一个记录字母的部分,并有一个动态创建的indexPath。
我想在我的tableview中添加一个搜索显示控制器。所以我做了,创建了所有过滤数据的方法。我确信我的功能运行良好,因为我打印数组计数以筛选搜索结果。
我的问题是第一次加载视图时,数据在屏幕上。但是当我点击搜索输入并输入一个字母时,我得到'UITableView dataSource must return a cell from tableView:cellForRowAtIndexPath:'
错误。在我使用断点后,我看到我的自定义单元格在搜索后为零。数据存在,但未初始化单元格。
以下是我用于自定义单元格初始化的代码:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"ObjectCell";
SpeakerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
NSDictionary *myObject = [[sections valueForKey:[[[sections allKeys] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)] objectAtIndex:indexPath.section]] objectAtIndex:indexPath.row];
cell.label1.text = [myObject objectForKey:@"myValue"];
return cell;
}
我认为在将控件放入IB时我犯了一个错误。所以我添加了对象的截图:
我的表格视图的连接检查器
我的搜索显示控制器的连接检查器
编辑:问题实际上已经解决,我使用的是UISearchBar而不是搜索显示控制器,但我想这个问题仍未解决。所以我愿意尝试任何方法让它发挥作用。
答案 0 :(得分:54)
截至此search display controller question,
您需要访问self.tableView
而不是tableView
:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [self.tableView dequeueReusableCellWithIdentifier:@"CellId"];
// do your thing
return cell;
}
答案 1 :(得分:2)
对于使用iOS 5和StoryBoards的用户,您需要使用以下方法代替 initWithIdentifier :
initWithStyle:(UITableViewCellStyle)stylereuseIdentifier:(NSString *)reuseIdentifier
示例:
NSString *cellIdentifier = @"ListItemCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier];
}
答案 2 :(得分:0)
我不确定这应该如何在商店中使用。
但通常你会检查[tableView dequeueReusableCellWithIdentifier:CellIdentifier]
是否返回一个单元格。
因为如果之前未加载的单元格或没有任何单元格可供重用,则必须创建一个新单元格:
SpeakerCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[SpeakerCell alloc] initWithIdentifier: CellIdentifier];
}
同样,当在Objective-C中声明局部变量时,我们不会将第一个字母大写。
答案 3 :(得分:0)
我遇到了同样的问题,第一个字母放入搜索字段时,自定义单元格(内置在Storyboard中)没有被绘制。然而,搜索成功了。
最后我发现good tutorial from Brenna Blackwell建议在UITableViewCell的相应子类中手动配置单元格绘图,添加UILabel和其他项目。