gpt4 book ai didi

swift - 一个 View Controller 上的多个 NSTableView

转载 作者:可可西里 更新时间:2023-11-01 00:16:33 25 4
gpt4 key购买 nike

我想在一个 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 工作正常,但它显然与 View Controller 紧密相关。添加第二个 NSTableView 的最佳方式是什么?

最佳答案

终于知道怎么做了。在我看来,这比将 NSTableView 放在主 Controller 中要好得多。

每个表都定义了自己的类:

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
}
}

表2相同,但显然可以有不同的数据等。

我的表是基于 View 的,所以这里是单元格 View 类定义:

import Cocoa

class MyCellView: NSTableCellView
{
@IBOutlet weak var itemName: NSTextField!
@IBOutlet weak var itemDescription: NSTextField!
}

这是 View Controller 方法:

import Cocoa

class ViewController: NSViewController
{

var dataSource1 : Table1!
var dataSource2 : Table2!

@IBOutlet weak var table1: NSTableView!
@IBOutlet weak var table2: NSTableView!

override func viewDidLoad()
{
super.viewDidLoad()

self.dataSource1 = Table1()
table1.setDataSource(self.dataSource1)
table1.setDelegate(self.dataSource1)

self.dataSource2 = Table2()
table2.setDataSource(self.dataSource2)
table2.setDelegate(self.dataSource2)

let nib = NSNib(nibNamed: "MyCellView", bundle: NSBundle.mainBundle())
table1.registerNib(nib!, forIdentifier: "MyCellView")
table2.registerNib(nib!, forIdentifier: "MyCellView")
}
}

关于swift - 一个 View Controller 上的多个 NSTableView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30441233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com