NSTableView的应用详解

一、引言

和iOS开发中的UITableView有很大差别,NSTableView并非是一个可滚动的列表视图,其是一个不可滚动、支持多列多行的原始列表视图。若要使NSTableView支持滚动,通常会将其嵌套入NSScrollView控件中。与UITableView类似,NSTableView的数据也是用过DataSource代理来提供,通过Delegate代理来进行表格视图的定制化。在OS X v10.6版本之前,NSTableView中行数据载体视图必须是NSCell的子类,之后版本的OS X支持开发者创建基于View的TableView视图,同样也支持基于Cell的TabelView视图,在开发者,我们可以根据实际需求选择。

二、构建一个简单的列表视图

首先新建一个测试工程,在ViewController.m文件中编写如下代码:

NSTableView的应用详解_第1张图片

运行工程效果如下图:

NSTableView的应用详解_第2张图片

这是一个最简单的TableView示例,但是细读代码,麻雀虽小五脏俱全。首先NSTableView中的列是由NSTableColumn类描述的。一个列表可以有多个列。也正如前面所说,numberOfRowsInTableView方法为数据源代理必须实现的方法,其中需要返回列表的行数。objectValueForTableColumn方法则是基于Cell的TableView必须实现的方法,其中需要返回每个列表行所填充的数据。

三、关于NSTableColume的探究

NSTableColume简单理解就是一列,其中可以进行此列样式的相关设置,NSTableColumn类中常用属性解析如下:

NSTableView的应用详解_第3张图片

四、Cell-Base:基于Cell的TableView视图

Cell-Base是OS X早起版本中常用的构造TabelView的方式,其中每一行的数据载体都必须是NSCell的子类。如本文开头的示例代码,Cell-Base的TableView必须实现的两个协议方法是numberOfRowsInTableView和objectValueForTableColumn方法,第一个方法设置列表行数,第2个方法设置每个数据载体对应的具体数据。需要注意,如果只实现这两个方法,则NSTableView会自动从列对象NSTableColume中取具体的行视图,通过dataCellForRow方法。当objectValueForTableColumn方法将每个行具体的数据返回后,会调用cell的setObjectValue方法(因此如果要自定义cell,必须实现这个方法)。如果我们要对Cell的渲染进行一些定制,可以在如下方法中实现:

NSTableView的应用详解_第4张图片
NSTableView的应用详解_第5张图片

五、View-Base:基于View的TableView视图

基于View-Base的TableView要比基于Cell的TableView更加灵活,其中每行数据载体可以是任意NSView的子类。代码示例如下:

NSTableView的应用详解_第6张图片
NSTableView的应用详解_第7张图片

关于NSTableRowView类我们下面来做具体介绍。

六、NSTableRowView解析

NSTableRowView用在View-Base的TableView中,其作为行容器存在。

NSTableView的应用详解_第8张图片

七、来总结下NSTableViewDataSource协议


NSTableView的应用详解_第9张图片

八、来总结下NSTableViewDelegate协议

九、NSTableView中常用的属性和方法

十、相关通知

//列表选择改变后发的通知APPKIT_EXTERN NSNotificationName NSTableViewSelectionDidChangeNotification;

//列移动后发的通知APPKIT_EXTERN NSNotificationName NSTableViewColumnDidMoveNotification;

//列宽度改变后发的通知APPKIT_EXTERN NSNotificationName NSTableViewColumnDidResizeNotification;

//选择改变时发的通知APPKIT_EXTERN NSNotificationName NSTableViewSelectionIsChangingNotification;

你可能感兴趣的:(NSTableView的应用详解)