在UITableViewCell中的accessoryView中使用UIImageView

时间:2013-09-06 19:53:08

标签: iphone ios cocoa-touch uitableview

我正在尝试为UIAccessoryView使用自定义图像,但我似乎无法让它工作。当表视图启动时,它不会使用任何图像进行更新。我的代码如下:

- (UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *tableViewCell = [tableView dequeueReusableCellWithIdentifier:@"Cell"];
    MenuItem *menuItem = [self.menuItems objectAtIndex:indexPath.row];

    if (!tableViewCell)
    {
        tableViewCell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"Cell"];
        tableViewCell.textLabel.font = [UIFont fontWithName: CaptionDistractionBodyFontName size: 15];
        imageView.contentMode = UIViewContentModeCenter;
        tableViewCell.accessoryView = [[UIImageView alloc] initWithImage:nil];
    }

    tableViewCell.textLabel.text = menuItem.name;

    UIImageView *imageView = (UIImageView*)tableViewCell.accessoryView;
    imageView.image = nil;

    if (menuItem.type == MenuItemTypeCheckMark)
    {
        if (menuItem.isCheckMarked)
        {
            imageView.image = [UIImage imageNamed:@"DisclosureViewX"];
        }
    }
    else if (menuItem.type == MenuItemTypeSubmenu)
    {
        imageView.image = [UIImage imageNamed:@"DisclosureViewArrow"];
    }

    return tableViewCell;
}

我尝试了很多不同的内容,即调用setNeedsLayout,将代码移动到UITableViewCell中的自定义layoutSubviews,似乎没有任何效果。除了自己创建一个全新的配件视图之外,正确的方法是什么?

3 个答案:

答案 0 :(得分:1)

尝试做

tableViewCell.accessoryView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"DisclosureViewX"]];

答案 1 :(得分:1)

由于您最初使用UIImageView图片设置了nil,因此图片视图的框架的宽度和高度为零。您需要在分配实际图像后重置帧。

imageView.image = [UIImage imageNamed:@"DisclosureViewX"];
imageView.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);

编辑:

实际上,在设置图片后调用[imageView sizeToFit]而不是设置frame会更容易。

答案 2 :(得分:0)

我认为你的问题是图像视图创建的大小为零。使用initWithFrame:或initWithImage:,其中image不是nil。使用initWithImage:创建后,图像视图将边界设置为图像大小。单元格将自动居中于附件视图。