NSTableView Storyboard使用

NSTableView不会自己存储数据,而是从一个数据源取数据,而这个数据源是要实现NSTableViewDataSource Protocol的方法,而NSTableView的行为则需要实现NSTableViewDelegate Protocol,比如鼠标双击表格,选中表格哪一行等事件,而这些都不需要通过继承NSTableView来重新实现,只需要通过这个协议重写。

NSTableViewDataSource Protocol必须要实现的方法:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)aTableView; 获得表格数据的行数

- (id)tableView:(NSTableView *)tableView objectValueForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row  根据行列加载数据

NSTableViewDelegate Protocol的常用方法:
- (void)tableView:(NSTableView *)tableView willDisplayCell:(id)cell forTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 根据cell来加载数据,较为常用

- (BOOL)tableView:(NSTableView *)tableView shouldEditTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row 是否允许编辑当前所在行的数据

- (BOOL)selectionShouldChangeInTableView:(NSTableView *)tableView  能否选中表格的行,返回NO则不能选中表格的每行数据

- (BOOL)tableView:(NSTableView *)tableView shouldSelectRow:(NSInteger)row 指定哪几行能选中或不能选中

- (BOOL)tableView:(NSTableView *)tableView shouldSelectTableColumn:(NSTableColumn *)tableColumn 返回YES则选中某列,该列下所有的元素均呈选中状态

- (void)tableView:(NSTableView *)tableView mouseDownInHeaderOfTableColumn:(NSTableColumn *)tableColumn 鼠标左键按下响应事件函数

- (void)tableView:(NSTableView *)tableView didClickTableColumn:(NSTableColumn *)tableColumn 鼠标左键按下响应事件函数

- (void)tableView:(NSTableView *)tableView didDragTableColumn:(NSTableColumn *)tableColumn 移动列位置响应事件函数

- (CGFloat)tableView:(NSTableView *)tableView heightOfRow:(NSInteger)row

storyboard 使用

1、从show the object library 将Table View控件往view托,添加一个TableView控件。

2、如果你的cell想要有ImageView和Label,可以删除默认的Table Cell View,然后从Show the Object Library 中将Image &Text Table Cell View控件拖进去。

3、绑定:选中Table View控件,选择Show the Connections inspector。在Outlets中将dataSource 和delegate 项托中圆点到View Controller控制器进行绑定

4、自定义每行的高度,选中TableView控件,选择Show the Size inspector。在Table View中的Row Size Style 项选择:Custom或者勾选Explicit(效果是一样的),编辑Row Height(高度) 大小。

5、设置每列的身份:选中TableColumn,将Identifier 设置成IdentifierName(自己设,跟代码结合)

6、设置每列中TableViewCell的身份,选中Cell View,将Identifier设置成IdentifierName(自己设,跟代码结合)。


例子:
- (NSInteger)numberOfRowsInTableView:(NSTableView *)tableView
{
	return self.dataArr1.count;
}

- (NSView *)tableView:(NSTableView *)tableView viewForTableColumn:(NSTableColumn *)tableColumn row:(NSInteger)row
{
	NSString *identifierStr = [tableColumn identifier];
	
	if ([identifierStr isEqualToString:@"TableColumn1"]) {
		NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"TableViewCell1" owner:self];
		//FirstModel *model = self.dataArray[row];
		cellView.textField.textColor = [NSColor blueColor];
		cellView.imageView.image = [NSImage imageNamed:@"ceshitongji"]; //设置图片
		cellView.textField.stringValue = self.dataArr1[row];//model.content;        //设置文字
		return cellView;
	}else if([identifierStr isEqualToString:@"TableColumn2"]){
		NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"TableViewCell2" owner:self];
		//FirstModel *model = self.dataArray[row];
		cellView.textField.textColor = [NSColor redColor];
		cellView.imageView.image = [NSImage imageNamed:@"zhuangtaitongji"]; //设置图片
		cellView.textField.stringValue = self.dataArr2[row];//model.content;        //设置文字
		return cellView;
		
	}else{
		NSTableCellView *cellView = [tableView makeViewWithIdentifier:@"TableViewCell3" owner:self];
		//FirstModel *model = self.dataArray[row];
		// cellView.imageView.image = [NSImage imageNamed:@""]; //设置图片
		cellView.textField.textColor = [NSColor yellowColor];
		cellView.textField.stringValue = self.dataArr3[row];//model.content;        //设置文字
		return cellView;
		
	}
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BeanGo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值