开发者

Changing a custom accessoryView in a uitableviewcell?

开发者 https://www.devze.com 2022-12-31 23:56 出处:网络
I\'m trying to change the custom accessoryView of a uitableviewcell immediately after the user clicks on the cell. How would I do this?

I'm trying to change the custom accessoryView of a uitableviewcell immediately after the user clicks on the cell. How would I do this?

For the record, I'm using Matt Gallagher' custom table view tutorial:

http://cocoawithlove.com/2009/04/easy-custom-uitableview-drawing.html

Download link for source: http://projectswithlove.com/projects/EasyCustomTable.zip


EDIT

Tried this code, but it just changes the accessory AFTER touch-up. Also开发者_Python百科 tried willSelectRowAtIndexPath with same result.

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

EDIT

Problem solved by making the background image of the cell contain the accessories. so the accessory was 'faked' by making it part of the image


Perhaps you can try to reload the cell in willSelectRowAtIndexPath/didSelectRowAtIndexPath:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UIImage *indicatorImage = [UIImage imageNamed:@"indicatorSelected.png"];
    UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryView = [[[UIImageView alloc] initWithImage:indicatorImage] autorelease];
    [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath,nil] withRowAnimation:NO];
 }

Another recommendation: didSelectRowAtIndexPath returns void not NSIndexPath.


You could change the accessoryView in the selection method as shown:

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
    cell.accessoryView = newView;
}

This just grabs the current cell that was selected and then changes the accessory view of it. Your view object would go where newView is.


Use the highlightedImage property of UIImageView:

UIImageView* arrowView = [[UIImageView alloc] initWithImage:normalImage];
arrowView.highlightedImage = selectedImage;
cell.accessoryView = arrowView;
[arrowView release];
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号