收到有关在NSTableView中选择行的通知

时间:2013-11-24 08:43:36

标签: macos nstableview

截至目前,我正在使用tableViewSelectionDidChange通知来检测用户何时点击NSTableView中的任何行。但是使用此通知委托我需要取消选择所选行[tableView deselectRow:[tableView selectedRow]],因为在另一行被选中之前它不会通知。

这种方法的问题是,一旦取消选择行tableViewSelectionDidChange将再次得到通知,现在我需要检查selectedRow是否为-1(因为取消选择后没有选择行现在将返回-1)

tableView:didSelectRowAtIndexPathNSTableView的{​​{1}}与UITableView相同吗?如果没有,是否有更好的方法可以在选择同一行时收到通知?

1 个答案:

答案 0 :(得分:2)

我遇到了同样的问题,最终也在这里。

我有一个场景,我有一个歌曲的播放列表。我希望在一首歌中将状态设为“已选中”,但能够停止播放该歌曲并再次播放选择tableview的单元格。

我最终使用here in stackoverflow Peter Lapisu {{3}}找到的解决方案。

基本上,Peter建议扩展tableview,创建一个具有方法- (void)tableView:(NSTableView *)tableView didClickedRow:(NSInteger)row;的extendedDelegate属性。然后只需覆盖mouseDown事件,如下所示:

- (void)mouseDown:(NSEvent *)theEvent {

    NSPoint globalLocation = [theEvent locationInWindow];
    NSPoint localLocation = [self convertPoint:globalLocation fromView:nil];
    NSInteger clickedRow = [self rowAtPoint:localLocation];

    [super mouseDown:theEvent];

    if (clickedRow != -1) {
        [self.extendedDelegate tableView:self didClickedRow:clickedRow];
    }
}