Xcode 在Cocoa OS X的NSTableView中选择单元格时调用哪个方法?

Xcode 在Cocoa OS X的NSTableView中选择单元格时调用哪个方法?,xcode,cocoa,osx-snow-leopard,nstableview,Xcode,Cocoa,Osx Snow Leopard,Nstableview,我有一个NSTableView,我想获取单元格中的值。我只有一列,所以我只需要行号 我可以使用这个[tableView selectedRow]——但是我应该把它放在哪里?我想把它放在一个方法中,这个方法在选择任何一行时都会被调用 -(void)tableViewSelectionDidChange:(NSNotification *)notification{ NSLog(@"%d",[tableViewController selectedRow]); } 上述方法也不起作用,我得到的

我有一个NSTableView,我想获取单元格中的值。我只有一列,所以我只需要行号

我可以使用这个[tableView selectedRow]——但是我应该把它放在哪里?我想把它放在一个方法中,这个方法在选择任何一行时都会被调用

-(void)tableViewSelectionDidChange:(NSNotification *)notification{

NSLog(@"%d",[tableViewController selectedRow]);

}
上述方法也不起作用,我得到的错误 -[NSScrollView selectedRow]:无法识别的选择器已发送到实例0x100438ef0]

我想要类似iPhone tableview中可用的方法-

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath  {
}

什么是
tableViewController
对象?只有
NSTableView
实例响应
selectedRow
。您可以从
通知
的对象属性获取当前表视图(发送通知的表):

目标C:

-(void)tableViewSelectionDidChange:(NSNotification *)notification{
    NSLog(@"%d",[[notification object] selectedRow]);
}
斯威夫特:

func tableViewSelectionDidChange(notification: NSNotification) {
    let table = notification.object as! NSTableView
    print(table.selectedRow);
}
Swift 3(来自艾曼塔斯的回答):


你应该这样做

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(tableViewSelectionDidChangeNotification)
                                             name:NSTableViewSelectionDidChangeNotification object:nil];
它将在tableView选中行时执行操作


祝你好运

我的Xcode 10/swift 4.2的2美分

  func tableViewSelectionDidChange(_ notification: Notification) {
        guard let table = notification.object as? NSTableView else {
            return
        }
        let row = table.selectedRow
        print(row)
    }

Swift 5中的完整指南:

    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.didSelectRow(_:)), name: NSTableView.selectionDidChangeNotification, object: tableView)
    }



    @objc
    func didSelectRow(_ noti: Notification){
        guard let table = noti.object as? NSTableView else {
            return
        }
        let row = table.selectedRow
        print(row)
    }


    deinit {
        NotificationCenter.default.removeObserver(self)
    }

是否有方法获取所选单元格?是的,tableView.selectedRow…请查看此处,如果未选择任何内容,它将返回-1,或者返回0,1,2,3,4或选择任何一行。有点让人不知所措。。添加和删除观察者。我们确实有一个委托方法。
    override func viewDidLoad() {
        super.viewDidLoad()

        NotificationCenter.default.addObserver(self, selector: #selector(ViewController.didSelectRow(_:)), name: NSTableView.selectionDidChangeNotification, object: tableView)
    }



    @objc
    func didSelectRow(_ noti: Notification){
        guard let table = noti.object as? NSTableView else {
            return
        }
        let row = table.selectedRow
        print(row)
    }


    deinit {
        NotificationCenter.default.removeObserver(self)
    }