当我使用下面的代码段时,详细文字标签不会显示:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellIdentifier = @"NEW";
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath ];
if(cell==nil)
{
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
NSDictionary* item = [saleItems objectAtIndex:[indexPath row]];
cell.textLabel.text = [item valueForKey:@"name"];
cell.detailTextLabel.text = [item valueForKey:@"store"];
return cell;
}
然而,当我将上述方法修改为以下时,详细文本显示出来:
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellIdentifier = @"NEW";
[self.tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:cellIdentifier];
UITableViewCell* cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
NSDictionary* item = [saleItems objectAtIndex:[indexPath row]];
cell.textLabel.text = [item valueForKey:@"name"];
cell.detailTextLabel.text = [item valueForKey:@"store"];
return cell;
}
第一种方法出了什么问题? 使用dequeueReusableCellWithIdentifier的正确方法是什么?
答案 0 :(得分:2)
根据此SO post,注册UITableViewCell
表示将使用默认样式实例化所有单元格。 registerClass:forCellReuseIdentifier:
无法使用字幕和左右细节单元格。
答案 1 :(得分:2)
因为您创建了默认样式。您可以在iOS 6中找到问题中的一些方法。确定要定位iOS 6
您可以尝试此示例代码(不仅适用于ios 6):
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString* cellIdentifier = @"NEW";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
// if you sure the cell is not nil (created in storyboard or everywhere) you can remove "if (cell == nil) {...}"
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:cellIdentifier];
}
NSDictionary* item = [saleItems objectAtIndex:[indexPath row]];
cell.textLabel.text = [item valueForKey:@"name"];
cell.detailTextLabel.text = [item valueForKey:@"store"];
return cell;
}
希望这对你有帮助!
答案 2 :(得分:-1)
在第二种方法中,您不是对单元格进行排队,而是实际创建新单元格。这是不可取的。相反,使用第一种方法,但替换行:
UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath ];
与
UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];
这是因为包含indexPath的方法将始终返回单元格,因此检查;
if(!cell)
将始终返回true,因此您将无法使用其他样式创建单元格。但是使用没有索引路径的方法将返回nil,如果之前没有创建单元格...您可以在Apple提供的UITableViewCell文档上阅读更多内容:)