【问题标题】:NSTableView set column to disabledNSTableView 将列设置为禁用
【发布时间】:2013-07-28 00:09:31
【问题描述】:

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

我该怎么做?

谢谢!

【问题讨论】:

    标签: nstableview nsarraycontroller nstablecolumn


    【解决方案1】:

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

    前提条件:

    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、...)或者您可以在 Identity Inspector / Identity / Identifier 中的列处于活动状态时在 Interface Builder 中设置它。在我的情况下,列名是“复选框”

    解决方案:

    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];
    

    【讨论】:

    • 非常感谢!我也在尝试同样的事情。我明白我做错了什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-01
    • 2018-09-01
    • 1970-01-01
    • 1970-01-01
    • 2014-06-16
    • 1970-01-01
    相关资源
    最近更新 更多