OS X中的表格视图
2016-05-13 本文已影响51人
exialym
OS X中的表格视图与IOS中的表格视图挺像的,区别在于OS X中的表格可以有多个列,还可以对各个列进行排序。
列之间通过id进行区分
if tableColumn?.identifier == "Title" {
textField?.stringValue = song.title
} else if tableColumn?.identifier == "Duration" {
let durationText = NSString(format: "%i:%02i", Int(song.duration)/60,Int(song.duration)%60)
textField?.stringValue = durationText as String
}
排序通过这样的方法排序:
func tableView(tableView: NSTableView, sortDescriptorsDidChange oldDescriptors: [NSSortDescriptor]) {
for sortDescriptor in tableView.sortDescriptors.reverse() as [NSSortDescriptor] {
songs.sortInPlace(){ (item1, item2) -> Bool in
return sortDescriptor.compareObject(item1, toObject: item2) == NSComparisonResult.OrderedAscending
}
}
tableView.reloadData()
}
在OS X中,你可以不用dataSource和delegate来使用TableView。通过绑定,你可以非常方便的将数据与表格连接起来。表格里的数据一般都是数组形式的,数组里存着一个个对象的实例,每一列就是对象的某个属性。
- 使用Array Controller。将一个Array Controller与你的数组绑定起来,并在代码里创建一个Array Controller的Outlet。这里要注意的是,对数组的修改,比如添加与删除等,需要通过操作Array Controller来实现,比如添加songsController.addObject(aSong),再通过它们之间的绑定关系同步到你的数组。在你的代码中要访问这个数组中的元素的属性就可以正常的访问你自己的数组。
var songs: [Song] = []
//这里将所有song加到了songsController里,songsController在storyBoard里又是和songs绑定的
@IBOutlet weak var songsController: NSArrayController!
- 将Array Controller绑定到你的TableView的content,控制键arrangedObjects,模型键空。这里如果你直接绑定你自己的数组,或者虽然绑定的是Array Controller但在代码里对数组的修改是改的你自己的数组是不行的。目前我也不知道为啥。
- 接下来将你每一列的Table Cell View 下的Table View Cell下的文本域绑定到Table View Cell。控制键不需要,模型键objectValue.(你的对象的属性名)