NSTableView将列设置为禁用

时间:2013-07-24 15:45:30

标签: nstableview nsarraycontroller nstablecolumn

我有一个绑定到NSArrayController的NSTableView。第一列是复选框。我想让用户通过复选框选择要执行操作的行,当用户单击“运行”按钮时,我想将该列的状态设置为不可编辑。

我该怎么做?

谢谢!

1 个答案:

答案 0 :(得分:0)

而不是禁用列我根据全局应用状态禁用了应用中的各个复选框单元格。

前提条件:

1。)您的“运行按钮”在控制器类中设置某种全局状态。对我来说,它是一个“播放”按钮,在我的控制器中设置一个成员,如:

    if ([self gotoNextSong])
    _currentPlayMode = PLAYMODE_PLAY;
else
    _currentPlayMode = PLAYMODE_STOP;

2。)您的控制器已经是NSTableView的委托人。如果不: 在你的MyController.h中:

    @interface MyController : NSObject <NSTableViewDelegate>

在你的MyController.m中,让你的控制器成为表的代表 - 例如在你的init:方法

    [self.myTableView setDelegate:self];

3.)您知道包含复选框的列的标识符。如果不是,则其自动名称如column1,column2,...或者您可以在Interface Builder中设置它,同时该列在Identity Inspector / Identity / Identifier中处于活动状态。在我的情况下,列名称是“checkboxes”

解决方案:

1。)为表格添加委托方法,以便在渲染单元格时通知您。在此方法中,根据需要启用或禁用复选框行的单元格

- (void)tableView:(NSTableView *)aTableView willDisplayCell:(id)aCell forTableColumn:  (NSTableColumn *)aTableColumn row:(int)rowIndex
{
    if(([[aTableColumn identifier] isEqualToString:@"checkboxes"]))
    {
        if (_currentPlayMode == PLAYMODE_PLAY)
            [aCell setEnabled:NO];
       else
            [aCell setEnabled:YES];
    }
}

2.确保您的RUN按钮不仅设置了全局状态(在我的情况下为_currentPlayMode),而且还强制NSTableView重新绘制:

[self.myTableView setNeedsDisplay:YES];