在表视图右上角设置图像

时间:2013-08-07 08:43:27

标签: ios objective-c ipad ios5

如何在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];


}

预期产出:

enter image description here

我的输出:

enter image description here

二手图片:

enter image description here

更改x值后看到此输出:

enter image description here

4 个答案:

答案 0 :(得分: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是默认值...

答案 1 :(得分: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;
}

您可以直接下载sample

答案 2 :(得分:0)

尝试使用属性

[view setClipsToBounds:NO];

我不确定你必须设置此NO,但是尝试设置self.view,UITableView或Cell ..

答案 3 :(得分:0)

Gradiented background是cell.backgroundView?似乎你的activeBg.png在右边部分是半透明的,你可以通过它看到cell.backgroundView。我看到三个解决方案:

  1. 将半透明条带添加到Gradiented背景图像(如果您使用图像,但似乎您也可以使用CoreGraphics渐变来实现)
  2. Gradiented background应该不是cell.backgroundView,但它的子视图是较小的cell.backgroundView(可能是你的arroy和strench图像)
  3. 重写单元格的layoutSubviews方法,以便cell.backgroundView的宽度小于该单元格(我觉得这种方式不好)