在NSTableView中更改自定义按钮单元格的图像

时间:2011-02-28 11:57:15

标签: objective-c cocoa

您好我使用的是NSTableView,它包含2列 A和B

A包含数据 B包含按钮

我希望当用户点击表格视图中的任何按钮时,其图像必须更改。

我如何在tableview单元格中添加自定义按钮:

NSButtonCell *buttonCell = [[[NSButtonCell alloc] init] autorelease];
    [buttonCell setBordered:NO];
    [buttonCell setImagePosition:NSImageOnly];
    [buttonCell setButtonType:NSMomentaryChangeButton];
    [buttonCell setImage:[NSImage imageNamed:@"uncheck.png"]];
    [buttonCell setSelectable:TRUE];
    [buttonCell setTarget:self];
    [buttonCell setAction:@selector(deleteSongContent:)];


    [[myTable tableColumnWithIdentifier:@"EditIdentifier"] setDataCell:buttonCell];

当我点击按钮时,选择器方法被触发但我不明白如何更改按钮单元格的图像。

任何建议请!!!!!!!

编辑:

当我点击按钮时,会调用该方法及其工作原理:

-(void)selectButtonsForDeletion:(NSTableView *)tableView 
{
  NSEvent *currentEvent = [[tableView window] currentEvent];
  int columnIndex = [tableView columnAtPoint:
                     [tableView convertPoint:
                      [currentEvent locationInWindow] fromView:nil]];
    NSTableColumn *column = [[tableView tableColumns]objectAtIndex:columnIndex];
    NSButtonCell *aCell = [[tableView tableColumnWithIdentifier:
                          [column identifier]]
                          dataCellForRow:[tableView selectedRow]];


    NSInteger index = [[aCell title] intValue];
    if(![selectedIndexesArray containsObject:[NSNumber numberWithInt:index]])
    {
        [aCell setImage:[NSImage imageNamed:@"check.png"]];
        [selectedIndexesArray addObject:[NSNumber numberWithInt:index]];
    }
    else 
    {
        [aCell setImage:[NSImage imageNamed:@"uncheck.png"]];
        [selectedIndexesArray removeObjectAtIndex:[selectedIndexesArray indexOfObject:[NSNumber numberWithInt:index]]];
    }
}

2 个答案:

答案 0 :(得分:2)

最后我得到了答案:

我发现经过下面提到的方法:

- (void)tableView: setObjectValue: forTableColumn: row:

这个方法被称为:

-(void)tableView: willDisplayCell: forTableColumn: row:

并且我应用了我的逻辑,如果按钮上已经应用了检查图像,则不要更改它。

答案 1 :(得分:1)

如果你想要的只是改变NSButtonCell上的图像,那么你可以在被调用的选择器中轻松完成。选择器触发了一个参数。该参数是NSButtonCell对象(如果我是正确的)。

那么为什么不这样做呢:

- (void) deleteSongContent:(NSButtonCell*) button
{
    [button setImage[NSImage imageNamed:@"checked.png"]];
}