iph*_*aaw 7 macos nsview nstableview swift
我已经设置了一个带有嵌入式NSTableView的NSView.
我试图为对表视图单元格进行更改时运行NSTableViewCell的操作:
import Cocoa
class MyView: NSView
{
override func drawRect(dirtyRect: NSRect)
{
super.drawRect(dirtyRect)
}
@IBAction func valEntered2(sender: AnyObject)
{
Swift.print("valueEntered2")
}
}
Run Code Online (Sandbox Code Playgroud)
虽然这种方法在故事板上使用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
}
}
Run Code Online (Sandbox Code Playgroud)
我已在视图中设置表以使用此类:
我本来希望这是这个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")
}
}
Run Code Online (Sandbox Code Playgroud)
之后您必须将委托添加到表视图中
class MyTable: NSTableView, NSTableViewDataSource, 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, viewForTableColumn tableColumn: NSTableColumn?, row: Int) -> NSView?
{
let cell: NSTableCellView = tableView.makeViewWithIdentifier(tableColumn!.identifier, owner: self) as! NSTableCellView
cell.textField!.stringValue = "Hello World"
cell.delegate = self
return cell
}
}
Run Code Online (Sandbox Code Playgroud)
在该类中,您必须调用委托中的方法
func CellAction(){
//here you get the call back
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
379 次 |
| 最近记录: |