detailtext标签没有显示出来

时间:2013-08-23 01:58:15

标签: ios uitableview uikit

当我使用下面的代码段时,详细文字标签不会显示:

-(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的正确方法是什么?

3 个答案:

答案 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文档上阅读更多内容:)