我想在一个ViewController上有多个NSTableView。我使用以下代码实现了第一个TableView:
class MainViewController: NSViewController
{
@IBOutlet weak var tableView: NSTableView!
override func viewDidLoad()
{
super.viewDidLoad()
let nib = NSNib(nibNamed: "MyCellView", bundle: NSBundle.mainBundle())
tableView.registerNib(nib!, forIdentifier: "MyCellView")
let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate
appDelegate.view = self
}
}
extension MainViewController: NSTableViewDataSource, NSTableViewDelegate
{
func numberOfRowsInTableView(tableView: NSTableView) -> Int
{
return 5
}
func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat
{
return 25
}
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
let cell = tableView.makeViewWithIdentifier("MyCellView", owner: self) as! MyCellView
cell.itemName.stringValue = "row text"
return cell
}
}
这个NSTableView运行正常,但它显然与视图控制器紧密相关。添加第二个NSTableView的最佳方法是什么?
答案 0 :(得分:6)
终于找到了如何做到这一点。在我看来,这比将NSTableView放在主控制器中要好得多。
每个表都有自己的类:
Class<? extends Object>
表2是相同的,但显然可以有不同的数据等。
我的表是基于视图的,所以这里是单元格视图类定义:
import Cocoa
class Table1: NSTableView, NSTableViewDataSource, NSTableViewDelegate
{
override func drawRect(dirtyRect: NSRect)
{
super.drawRect(dirtyRect)
}
func numberOfRowsInTableView(tableView: NSTableView) -> Int
{
return 10
}
func tableView(tableView: NSTableView, heightOfRow row: Int) -> CGFloat
{
return 50
}
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
let cell = tableView.makeViewWithIdentifier("MyCellView", owner: self) as! MyCellView!
cell.itemName.stringValue = "hello"
cell.itemDescription.stringValue = "This is some more text"
return cell
}
}
以下是View Controller方法:
import Cocoa
class MyCellView: NSTableCellView
{
@IBOutlet weak var itemName: NSTextField!
@IBOutlet weak var itemDescription: NSTextField!
}
答案 1 :(得分:1)
这取决于你对“最佳”的意思。最简单的方法是根据回调中的tableView参数进行推理,即
func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
if(tableView == self.tableView1)
{
}
else if(tableView == self.tableView2)
{
}
}
但是我建议创建单独的类来用作数据源。这些类将实现UITableViewDataSource协议。您可以创建该类的两个实例,并相应地绑定表视图。