我有一个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无关。
答案 0 :(得分:1)
我发现一个解决方案是替换线路:
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"default"];
使用:
UITableViewCell *cell=[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue1 reuseIdentifier:@"default"];
并从故事板中删除原型单元格。不过,我已经读过,这不是最好的做法。