本文以 CellBased NSTableView 为例,讲述如何实现在table view 中内嵌复选框的目的。最终效果如下图所示。
首先创建一个 Cocoa App, 在 MainMenu.xib 中插入一个 NSTableView 控件,并将该table view 改为 Cell Based 类型。目前还没尝试 View Based 实现该目的。后续有时间会继续研究使用 View Based 如何实现。选中我们的tableview 在 Attributes Inspector 栏位设置 Columns 为 3列。并分别设置三个列的 identifier 和 title 为: checked name ID , Checked Name ID。 此时我们的table view 是这样的
下面开始编写我们的代理方法 checkDS.h 和 checkDS.m ,
#import <Foundation/Foundation.h>
#import <Cocoa/Cocoa.h>
@interface checkDS : NSTableView<NSTabViewDelegate, NSTableViewDataSource> {
}
@property (retain) NSTableView *tableView;
@property (assign) NSMutableArray *aryCheck;
@end
因为上面我们的NSTableView 所有列的cell 都是 NSTextFieldCell, 要实现将某一列替换为复选框,总共需要实现如下四个方法,这里直接帖出我的代码,
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView;
- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row;
- (NSCell *)tableView:(NSTableView *)tableView dataCellForTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row
- (void)tableView:(NSTableView *)tableView setObjectValue:(nullable id)object forTableColumn:(nullable NSTableColumn *)tableColumn row:(NSInteger)row
//下面的方法主要设置tableview 显示数据的行数。我们的数据源设为 属性 aryCheck.
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
return [aryCheck count];
}
//下面的方法用于设置tableview 显示数据的内容,当列的identifier 为name 和 ID 时,直接从字典中取出对应的值即可,当我们的列为 checked 时,因为要实现复选框的目的,我们进行了一个值的转换,若字典中取出的值为 “yes” 就置为 1, 若字典中取出的值为 "no" 就置为 0, 若有其他情况,这里可以设为其他值,后面我们其他的代理方法会根据这个值(yes 和 no)设置是否为 复选框,根据这里设置的 0 和 1 设置 复选框是选中和不选中状态。
- (id)tableView:(NSTableView *)ta