【发布时间】:2013-07-28 00:09:31
【问题描述】:
我有一个与 NSArrayController 绑定的 NSTableView。第一列是复选框。我想让用户通过复选框选择要执行操作的行,当用户单击“运行”按钮时,我想将该列的状态设置为不可编辑。
我该怎么做?
谢谢!
【问题讨论】:
标签: nstableview nsarraycontroller nstablecolumn
我有一个与 NSArrayController 绑定的 NSTableView。第一列是复选框。我想让用户通过复选框选择要执行操作的行,当用户单击“运行”按钮时,我想将该列的状态设置为不可编辑。
我该怎么做?
谢谢!
【问题讨论】:
标签: nstableview nsarraycontroller nstablecolumn
我不是禁用列,而是根据全局应用状态禁用应用中的各个复选框单元格。
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];
【讨论】: