我已经设置了一个带有嵌入式NSTableView的NSView.
我试图为对表视图单元格进行更改时运行NSTableViewCell的操作:
import Cocoa class MyView: NSView { override func drawRect(dirtyRect: NSRect) { super.drawRect(dirtyRect) } @IBAction func valEntered2(sender: AnyObject) { Swift.print("valueEntered2") } }
虽然这种方法在故事板上使用NSViewController之前已经运行良好,但是当我编译此代码时它会发出警告:
由’Table View Cell’发送的动作’valEntered2:’连接到’View’,一个无效的目标(基于视图的对象内部表视图,它们只连接到表视图的委托.)
所以它似乎不喜欢NSView中的动作所以我已经将NSTableView子类化了,所以我可以将它移动到那里:
class MyTable: NSTableView,NSTableViewDataSource,NSTableViewDelegate { let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate override init(frame frameRect: NSRect) { super.init(frame: frameRect) } required init?(coder: NSCoder) { super.init(coder: coder) self.setDataSource(self) self.setDelegate(self) } override func drawRect(dirtyRect: NSRect) { super.drawRect(dirtyRect) } func numberOfRowsInTableView(tableView: NSTableView) -> Int { return 5 } func tableView(tableView: NSTableView,viewForTableColumn tableColumn: NSTableColumn?,row: Int) -> NSView? { let cell: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn!.identifier,owner: self) as! NSTableCellView cell.textField!.stringValue = "Hello World" return cell } }
我已在视图中设置表以使用此类:
我本来希望这是这个NSTableView的委托,并能够将TableViewCell的动作添加到MyTable,但它拒绝创建动作.
我错过了哪些步骤?
首先,你必须在tableView单元格中添加一个委托
import Cocoa protocol cellAction { func CellAction() } class MyView: NSView { var delegate:cellAction! override func drawRect(dirtyRect: NSRect) { super.drawRect(dirtyRect) } @IBAction func valEntered2(sender: AnyObject) { delegate.CellAction() Swift.print("valueEntered2") } }
than after that you have to add delegate to the table view
class MyTable: NSTableView,NSTableViewDelegate,cellAction { let appDelegate = NSApplication.sharedApplication().delegate as! AppDelegate override init(frame frameRect: NSRect) { super.init(frame: frameRect) } required init?(coder: NSCoder) { super.init(coder: coder) self.setDataSource(self) self.setDelegate(self) } override func drawRect(dirtyRect: NSRect) { super.drawRect(dirtyRect) } func numberOfRowsInTableView(tableView: NSTableView) -> Int { return 5 } func tableView(tableView: NSTableView,owner: self) as! NSTableCellView cell.textField!.stringValue = "Hello World" cell.delegate = self return cell } }
in that class you have to call a method in delegate
func CellAction(){ //here you get the call back }