1

如何在 Table View 右上角设置 UIImage。我正在使用表格视图和显示联系人列表做 iPad 应用程序。单击联系人表格视图时要显示右侧详细信息...在这里我想放置一张在表格视图中选择的图像...

任何人都给我这个建议

谢谢

在这里查看我的代码

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
               ![enter image description here][1]

         UIImageView *imv = [[UIImageView alloc]initWithFrame:CGRectMake(347, 0.5, 14, 48)];
         imv.image=[UIImage imageNamed:@"activeBg.png"];
         [cell.selectedBackgroundView addSubview:imv];


}

预期输出:

在此处输入图像描述

我的输出:

在此处输入图像描述

使用的图像:

在此处输入图像描述

更改 x 值后查看此输出:

在此处输入图像描述

4

4 回答 4

1

首先,要小心浮动坐标,因为它们可能看起来很模糊!

你的 UITableViewCell 的宽度是多少?您应该根据像元大小计算坐标:

-(void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
     CGRect rectImageView = CGRectMake(cell.frame.size.width - 14, 1, 14, 48); // maybe even y and height is calculateable
     UIImageView *imv = [[UIImageView alloc]initWithFrame:rectImageView];
     imv.image=[UIImage imageNamed:@"activeBg.png"];
     [cell.selectedBackgroundView addSubview:imv];
     [cell setClipsToBounds:NO]; // do not clip subviews


}

此外 setClipsToBounds 很重要,如果我没记错的话 YES 是默认值...

于 2013-08-07T08:59:31.687 回答
1

viewDidLoad:在方法中写下这两行。

arrowImage = [UIImage imageNamed:@"image"];
[tableView setClipsToBounds:NO];

现在你要做的didSelectRowAtIndexPath:是:

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
    [self addArrowToIndexPath:indexPath];
}

这里是方法定义:

-(void)addArrowToIndexPath:(NSIndexPath *)indexPath
{
    CGRect rect = [tableView rectForRowAtIndexPath:indexPath];

    if (arrowView)
    {
        [arrowView removeFromSuperview];
        arrowView = nil;
    }

    // arrowView is an UIImageView declared globally
    arrowView  = [[UIImageView alloc] initWithImage:arrowImage];
    rect.origin.x = CGRectGetMaxX(rect);
    rect.size = arrowImage.size;
    [arrowView setFrame:rect];
    [tableView addSubview:arrowView];
}

注意:还要设置行高 = arrowImage.size.height,即它可以适合单元格高度。

-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    return arrowImage.size.height;
}

您可以直接下载示例

于 2013-08-07T09:21:49.250 回答
0

Try with property

[view setClipsToBounds:NO];

I am not sure on which you have to set this NO, but try out setting for self.view, or UITableView, or Cell..

于 2013-08-07T08:59:02.960 回答
0

渐变背景是cell.backgroundView?看来您的 activeBg.png 在右侧是半透明的,您可以通过它看到 cell.backgroundView。我看到三个解决方案:

  1. 将半透明条添加到渐变背景图像(如果您使用图像,但似乎您也可以使用 CoreGraphics 渐变)
  2. 渐变背景应该不是 cell.backgroundView 而是它的子视图,即较小的 cell.backgroundView (可能与您的 arroy 和 strench 图像一起使用)
  3. 重写单元格的 layoutSubviews 方法,使 cell.backgroundView 的宽度更小(我认为这种方式不好)
于 2013-08-07T09:10:25.110 回答