首先创建一个新的mac工程,不勾选StoryBoard

打开MainMenu.xib ,选中主window并向window中拖入一个NSTableView,并加上约束。

选中tableview,并设置colloms为1,将header选项的勾去掉,并删掉Table Column下面的Table Cell View

创建一个empty的xib文件命名为CustomCell.xib

往CustomCell中拖入tablecellview,可以去掉不需要的控件,添加上自己需要的控件,将cell的identifier改为CustomCell

创建一个CustomCell类,继承NSTableCellView,将xib内cell的Class改为CustomCell,然后就可以连线了

CustomCell.h 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| import Cocoa
class CustomCell: NSTableCellView {
@IBOutlet weak var color: NSColorWell!
@IBOutlet weak var label1: NSTextField!
@IBOutlet weak var label2: NSTextField!
override func drawRect(dirtyRect: NSRect) {
super.drawRect(dirtyRect)
}
}
|
这样cell的工作就完成了
将TableView自身与TableView的datasource和delegate都连接到appdelegate里面.注意一共需要连三条线

appdelegate的代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
| import Cocoa
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate , NSTableViewDataSource,NSTableViewDelegate {
@IBOutlet weak var tableview: NSTableView! {
didSet{
self.tableview.registerNib(NSNib(nibNamed: "CustomCell", bundle: nil)!, forIdentifier: "CustomCell")
}
}
@IBOutlet weak var window: NSWindow!
func numberOfRowsInTableView(tableView: NSTableView) -> Int {
return 20
}
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView? {
var cell = tableview.makeViewWithIdentifier("CustomCell", owner: self) as! CustomCell
cell.label1.stringValue = "============="
cell.label2.stringValue = "+++++++++++++"
cell.color.color = NSColor.yellowColor()
return cell
}
func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat {
return 111
}
func applicationDidFinishLaunching(aNotification: NSNotification) {
}
func applicationWillTerminate(aNotification: NSNotification) {
}
}
|
这样就全部完成了。我故意将cell文件单独放在xib里,是为了方便复用。
mac下自定义cell几乎跟ios下的一样,但是相关文章实在太少,于是我将整个过程记录下来,供大家参考。
源代码可以在这里下载,运行环境Xcode 6.3+,swift 1.2
代码有点老了.不能运行,但是看看逻辑和xib的设置是没什么问题的.