无法将'NSTableCellView'类型的值转换为'NSTableViewTest'

时间:2015-05-28 22:29:38

标签: swift nstableview

我正在尝试为NSTableView设置一个自定义类,并且似乎几乎就在那里。

当我运行此代码时,我收到一条错误消息:无法在'let cell = tableView.makeViewWithIdentifier(tableColumn!.identifier)行中将'NSTableCellView'(0x7fff7a859af0)类型的值转换为'NSTableViewTest.MyCellView'(0x10001e480) ,所有者:自我)as!MyCellView!“

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

    func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
    {
        let cell = tableView.makeViewWithIdentifier(tableColumn!.identifier, owner: self)  as! MyCellView!
        return cell
    }

}

将我的单元格类定义为:

import Cocoa

class MyCellView: NSView 
{
    @IBOutlet weak var itemName: NSTextField!
    @IBOutlet weak var itemDescription: NSTextField!
    @IBOutlet weak var itemImage: NSImageView!

}

4 个答案:

答案 0 :(得分:2)

您可能还需要在ViewController中注册nib文件,可以在viewDidLoad()中完成。

let nib = NSNib(nibNamed: "MyCellView", bundle: Bundle.main)
myTableView.register(nib!, forIdentifier: "MyCellView")

答案 1 :(得分:1)

问题是您使用的标识符。 tableColumn!.identifier这是列的标识符,但您想为单元格视图生成NSView。

   1. Go to the storyboard and select a cell view
   2. associate it with MyCellView (set it in the identity inspector)
   3. specify an identifier in the storyboard (set it in the identity inspector)
   4. Modify the identifier in the code. It should be some string like "MyCellView"

答案 2 :(得分:1)

tableColumn!.identifier应该是一个String,例如。 “细胞”。 在Storyboard中选择Prototype单元格后,String应与标识符匹配。

func tableView(tableView: NSTableView, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
    let cell = tableView.makeViewWithIdentifier("cell", owner: self)  as! MyCellView!
    return cell
}

enter image description here

答案 3 :(得分:0)

您的MyCellView班级为NSView,将其更改为NSTableCellView类型,因为您无法将NSView转变为NSTableCellView

我希望能帮到你!