详细文本标签未显示

Posted

技术标签:

【中文标题】详细文本标签未显示【英文标题】:detailtext label not showing up 【发布时间】:2013-08-23 01:58:15 【问题描述】:

当我使用下面的sn-p时,详细文本标签不显示:

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

【问题讨论】:

【参考方案1】:

根据这个SO post,注册UITableViewCell意味着所有的单元格都将被实例化为默认样式。 registerClass:forCellReuseIdentifier: 不提供字幕和左右详细信息单元格。

【讨论】:

【参考方案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;

希望对您有所帮助!

【讨论】:

【参考方案3】:

在第二种方法中,您不是将单元格出队,而是实际上创建了一个新单元格。这是不可取的。相反,使用第一种方法,但替换行:

UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier forIndexPath:indexPath ];

UITableViewCell* cell = [self.tableView dequeueReusableCellWithIdentifier:cellIdentifier];

这是因为包含 indexPath 的方法总是会返回单元格,所以请检查;

if(!cell)

将始终返回 true,因此您将无法创建具有其他样式的单元格。但是使用没有索引路径的方法将返回 nil,如果之前没有创建单元格...您可以阅读更多关于 Apple 提供的 UITableViewCell 文档:)

【讨论】:

以上是关于详细文本标签未显示的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 详细文本标签布局不当

我用UEditor编辑文本保存后,当我在查看详细页面时,发现文本域里面的字符还带了html标签,这是怎么一回

“左侧详细信息”样式单元格文本中的详细信息标签被切断-迅速

css 在属性详细信息上用文本标签替换图标

以编程方式设置静态单元格的详细文本标签

导航控制器未显示在 TableView 中