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