使用UITableView
,使用
indexPath
非常容易
tableView.indexPath(for: cell)
但是在MacOS上,遗憾的是这种方法并不存在。
我的用例如下:
我在Cell View
中有一个按钮,点击后我会调用委派的ViewController
来执行操作。现在我有了单元格的实例,我想要获得的是NSTableView
中的行(位置)。我怎样才能获得它?
答案 0 :(得分:5)
在macOS中使用基于视图的表格视图,为按钮创建标准IBAction
并获取row(for view:
func row(for view: NSView) -> Int
返回指定视图的行的索引。
基于视图的表格视图更加通用,更易于处理。
答案 1 :(得分:0)
要在@vadian的答案中添加特定案例:
我的情况与@ rdid4相同,但是有多个tableViews。我输入了这个:
func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? {
switch (tableView){
let cellView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("projectCell1"), owner: self) as? ProjectCell
if (tableColumn?.identifier)!.rawValue == "projectColumn1" {
let cellView = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier("projectCell1"), owner: self) as? ProjectCell
cellView有一个嵌入式NSButton
cellView?.statusButton.action = #selector(projectStatusChanged(sender:))
cellView?.statusButton.tag = 1
单元格标签显示了我需要处理的NSTableView(项目中有两个)。
然后进入
@objc func projectStatusChanged(sender: NSButton) {
switch (sender.tag){
case 1:
projectRowIndex = projectTable1.row(for: sender)
....
case 2:
projectRowIndex = projectTable2.row(for: sender)
default...
我希望这对其他人有帮助。