我如何在UITableViewCell中定制附件披露图像?

我想在我的UITableView中使用标准披露附件图像的自定义版本。 我怎样才能做到这一点? 我希望子分类UITableViewCell是不必要的这个基本的东西。

您将需要创build一个自定义视图,并将其分配给UITableViewCell对象的accessoryView属性。 就像是:

 myCell.accessoryView = [[ UIImageView alloc ] initWithImage:[UIImage imageNamed:@"Something" ]]; 
 - (UITableViewCell *)tableView:(UITableView *)tView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UIImage *indicatorImage = [UIImage imageNamed:@"Arrow.png"]; cell.accessoryView =[[[UIImageView alloc] initWithImage:indicatorImage] autorelease]; return cell; } 

以及我与上面给出的帮助代码

我遇到了与Greg相同的问题 – 附件视图不跟踪(如果您使用UIImageView)

我解决了这个问题:

 UIImage * image = [ UIImage imageNamed:@"disclosure-button-grey.png" ] ; UIControl * c = [ [ UIControl alloc ] initWithFrame:(CGRect){ CGPointZero, image.size } ] ; c.layer.contents = (id)image.CGImage ; [ c addTarget:self action:@selector( accessoryTapped: ) forControlEvents:UIControlEventTouchUpInside ] ; cell.accessoryView = c ; [ c release ] ; 

从Apple展示了一个很好的例子,展示了如何使用UIControl来完成这种accessoryView自定义。

在UIControl中重写- (void)drawRect:(CGRect)rect并不是最简单的方法,但给了你很多的灵活性来devise好的配件视图。

在这里输入图像说明

我会这样做:

 UIImageView *chevronImgVw = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"chevron_accessory_vw_img.png"]]; chevronImgVw.frame = CGRectMake(cell.accessoryView.frame.origin.x, cell.accessoryView.frame.origin.y, 10, 20); cell.accessoryView = chevronImgVw; 

请在投票前尝试一下! 因为目前它有两个upvotes和两个downvotes!

我试过上面的代码,它似乎不工作了,也许由于这个职位的年龄,所以我会抛弃我的线,给了我定制的配件视图。

 [cell setAccessoryView:[[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrowBtn"]]]; 

希望有人认为这有用。

注:不要设置自定义单元格标记:0。 该标签是为textLabel视图保留的。 如果您在Xcode Storyboard中设置标签,则必须将自定义视图/标签的标签设置为1或更高。

注意苹果的例子:

  - (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath (NSIndexPath *)indexPath { UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"MyIdentifier"]; UILabel *label; label = (UILabel *)[cell viewWithTag:1]; label.text = [NSString stringWithFormat:@"%d", indexPath.row]; label = (UILabel *)[cell viewWithTag:2]; label.text = [NSString stringWithFormat:@"%d", NUMBER_OF_ROWS - indexPath.row]; return cell; }