UIImage作为UITableViewCell中的附件视图未显示

时间:2013-07-22 17:35:45

标签: objective-c uitableview uiimage accessoryview

在我的应用程序中,当提示用户选择项目时,我会调出一个UITableView。根据商品是否有库存,缺货,订单等,我想在UITableViewCell的右侧显示图像。

我尝试使用配件视图按钮,但它没有显示在UITableViewCell上。我尝试将UITableViewCellStyle更改为UITableViewCellStyleValue2(带有详细信息闭包按钮的样式),并尝试直接设置单元格的附件类型。

static NSString *CellIdentifier = @"MyCellIdentifier";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil)
{
    cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
    //cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleValue2 reuseIdentifier:CellIdentifier];
}

[cell.textLabel setText:@"Testing"];
[cell.detailTextLabel setText:@""];

//cell.accessoryType = UITableViewCellAccessoryNone;
//cell.accessoryType = UITableViewCellAccessoryDetailDisclosureButton;

UIImageView *imageView = [[UIImageView alloc] initWithImage:[myImageFilePath stretchableImageWithLeftCapWidth:0 topCapHeight:1.0]];
[imageView setContentMode: UIViewContentModeScaleAspectFit];
[imageView setFrame:CGRectMake(0, 5, cell.frame.size.height - 10, cell.frame.size.height - 5)];

cell.accessoryView = imageView;

return cell;

当应用程序运行时,UITableViewCells会显示“Testing”文本,但单元格的右侧没有图像。

是否需要重写另一个方法才能为detail diclosure按钮实现自定义UIImage?

“按钮”更像是一个状态指示器,因为我不想点击按钮做任何不同于在UITableViewCell上任何其他地方点击的事情(只选择行)。


其他一些信息:

如果我删除

[imageView setFrame:CGRectMake(0, 5, cell.frame.size.height - 10, cell.frame.size.height - 5)];

然后图像显示在UITableViewCell中,但它太大而且不适合单行,因此它与其他行的附件视图重叠。

我正在使用setFrame,以便调整图像大小以适应UIViewContentModeScaleAspectFit,以便它适合行,但它似乎可以防止图像出现。

请注意,在此示例中,cell.frame.size.height = 44。


如果我将框架更改为:

[imageView setFrame:CGRectMake(0.0, 0.0, 120, 44)];

然后图像出现在行上。

然而,由于它是120像素宽,它正在切断文本的尾随...之前需要。在尾随...之前图像可以适合约3次,宽度为120,高度为44。

我怎样才能得到尾随......以接近图像?

如果我将120降低到较低值,图像会向右移动并最终从单元格中移出。

4 个答案:

答案 0 :(得分:1)

UITableView的宽度为804.将其更新为768允许我使用已发布的原始代码。

答案 1 :(得分:0)

您的问题与此处的问题非常类似: Using a custom image for a UITableViewCell's accessoryView and having it respond to UITableViewDelegate

除非您需要,否则可以忽略“有响应”位。但是,正如你在那里看到的那样,rect对于accessoryView属性来说是正方形的,所以120x44的图像可能无法正确拟合。

我会重新考虑你解决这个问题的方法,并创建一个自定义的UITableViewCell子类,它具有你需要的必要项目(听起来像UILabel和UIImageView)。这样,您可以轻松控制标签的大小与图像的大小,标签如何包裹线条(如果它完全包裹或截断)等等。

答案 2 :(得分:0)

另一种方法是将UITableviewCell子类化,并在“layoutSubviews”中设置框架,并确保为每个单元格传递正确的行高。

通过子类化,您将获得充分的灵活性。

希望这会有所帮助

答案 3 :(得分:-1)

我猜你的CGRect X和Y存在问题,在这种情况下是0和5.也许尝试将它们设置为dinamically可以解决这个问题。让我知道