截至目前,我正在使用tableViewSelectionDidChange
通知来检测用户何时点击NSTableView
中的任何行。但是使用此通知委托我需要取消选择所选行[tableView deselectRow:[tableView selectedRow]]
,因为在另一行被选中之前它不会通知。
这种方法的问题是,一旦取消选择行tableViewSelectionDidChange
将再次得到通知,现在我需要检查selectedRow
是否为-1(因为取消选择后没有选择行现在将返回-1)
tableView:didSelectRowAtIndexPath
中NSTableView
的{{1}}与UITableView
相同吗?如果没有,是否有更好的方法可以在选择同一行时收到通知?
答案 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];
}
}