单行UITableView在滚动之前不会显示detailTextLabel

时间:2014-11-12 19:43:17

标签: ios objective-c iphone uitableview

我有一个UITableView,通过故事板创建,单元格样式设置为"右侧细节"。如果且仅当满足以下任何条件时,这将正确显示textLabel和detailTextLabel:

  • 表格视图中有多行
  • 我将屏幕上的单元格滚动(显然它只是在滚动后反弹回来,因为它是唯一的项目,但现在它正确显示)
  • 我触摸(突出显示)项目
  • 我切换到另一个视图并返回(这是一个标签视图应用程序)

但是,如果我只有单一的条目,我没有做任何事情,只有textLabel出现。

我的代码非常基本。我有一个数组,我用制表符分隔的textLabel / detailTextLabel值填充。然后,在我的tableView:cellForRowAtIndexPath:函数中,我有以下代码:

-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"default"];

    NSDictionary *itemDict=[scanArray objectAtIndex:indexPath.row];
    cell.detailTextLabel.text=[itemDict valueForKey:@"quantity"];
    cell.textLabel.text=[itemDict valueForKey:@"item"];

    [cell setNeedsLayout];
    [cell setNeedsDisplay];

    return cell;
}

每当我对scanArray对象进行更改时,我都会在表视图上调用reloadData函数。这显然有效,因为textLabel确实显示在tableview中,但是如上所述detailTextLabel没有(最初)。

编辑:请注意,表格的内容不是静态的 - 用户将在正常使用期间添加和删除项目。只是在第一个项目添加到列表后立即出现问题。一旦用户将第二个项目添加到列表中(或执行我上面提到的任何其他操作),问题就会消失。

还有人指出,将我的数据存储为字典数组而不是制表符分隔的文本会更好。我同意,并将进行改变。

Edit2:响应用户点击按钮,表格会更新。用户输入两个值(项目编号和数量),然后点击按钮。然后运行以下代码:

NSDictionary *itemDict=[NSDictionary dictionaryWithObjectsAndKeys:
                                self.ItemCode.text,@"item",
                                self.Quantity.text,@"quantity",
                                returnedData,@"id", nil];

[scanArray insertObject:itemDict atIndex:0]; //The most recent item is always the first item in the list.
[self.ItemCode setText:@""]; //clear out the entry fields
[self.Quantity setText:@""];

[self.HistoryTable reloadData]; //reload the table view.

我也在这里处理其他数据(特别是将其传输到服务器),但这与tableView无关。

1 个答案:

答案 0 :(得分:1)

我发现一个解决方案是替换线路:

UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"default"];

使用:

UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"default"];

并从故事板中删除原型单元格。不过,我已经读过,这不是最好的做法。