您好我使用的是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]]];
}
}
答案 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"]];
}