滚动时UITableViewCell detailTextLabel消失

时间:2014-11-04 11:29:41

标签: ios objective-c uitableview

我使用了一组字符串来设置detailTextLabel。最初所有字幕都设置正确但如果我滚动detailTextLabel消失。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath {

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"personCell"  forIndexPath:indexPath];

    Person *person = [_persons objectAtIndex:indexPath.row];
    cell.textLabel.text = person.name;
    cell.detailTextLabel.text = person.phone;

    // also tried setNeedsLayout but does not help
    [cell setNeedsLayout];

    return cell;
}

我正在使用iPhone 6和iOS 8.我还使用了故事板并将UITableViewCell样式设置为Subtitle

2 个答案:

答案 0 :(得分:4)

好的,既然我们已经发现了问题(这个人的电话号码为零),你可以通过几种方式解决问题。

您似乎不希望将文本设置为空白。我想这是因为它以奇怪的方式布置了单元格,标题被推到顶部,但没有任何东西在它下面。可以理解的。

因此,您可以创建自定义UITableViewCell子类。在它里面你可以自己管理布局,如果数字是零,那就用一种方式排列,如果它有一个电话号码,则用不同的方式排列。

更简单的方法是使用两个不同的原型单元。

在故事板中创建两个原型单元格。

一个类型Basic,并为其提供reuseIdentifier noPhoneNumberCell。 另一个类型为Subtitle,重用标识符为phoneNumberCell

然后在代码中你可以做这样的事情......

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath   *)indexPath
{
    Person *person = [_persons objectAtIndex:indexPath.row];
    UITableViewCell *cell;

    if (person.phone) {
        cell = [tableView dequeueReusableCellWithIdentifier:@"phoneNumberCell" forIndexPath:indexPath];

        cell.detailTextLabel.text = person.phone;
    } else {
        cell = [tableView dequeueReusableCellWithIdentifier:@"noPhoneNumberCell" forIndexPath:indexPath];
    }

    cell.textLabel.text = person.name;

    return cell;
}

现在将创建两个单元格队列。一个用于有电话号码的人,另一个用于没有电话号码的人。

这样你就不会混淆两者,所以避免你遇到的问题。

答案 1 :(得分:2)

[cell.detailTextLabel sizeToFit];