插入NSTableView后如何进行多个选择行

时间:2013-07-26 19:01:19

标签: macos select insert nstableview rows

我正在开发Mac应用并处理NSTableView以显示播放列表。用户可以将歌曲添加到表格中(或从中删除)。它支持撤消/重做操作。

以下是我的代码部分:

// MyDocument.m

- (void)insertObject:(URSoundTrack *)object inSoundTracksAtIndex:(NSUInteger)index{

    [[self.undoManager prepareWithInvocationTarget:self] removeObjectFromSoundTracksAtIndex:index];
    [self.undoManager setActionName:@"Add sound track"];

    [self.soundTracks insertObject:object atIndex:index];
}

- (void)removeObjectFromSoundTracksAtIndex:(NSUInteger)index{
    URSoundTrack *soundTrack = [self.soundTracks objectAtIndex:index];

    [[self.undoManager prepareWithInvocationTarget:self] insertObject:soundTrack inSoundTracksAtIndex:index];
    [self.undoManager setActionName:@"Remove sound track"];

    [self.soundTracks removeObjectAtIndex:index];
}

这两种方法对于撤销/重做是对抗的,并且它完美地工作。

但我想让表格视图在插入后选择刚刚添加的行。撤消删除或重做插入(插入对象)时,它也应该有效。

我尝试了一些方法,但他们没有用。我想知道如何让表格视图在插入后选择那些行(即使在撤消/重做以插入行时)?

====更新了====

在我的应用中,在一次操作中可能会插入多个对象,即使撤消或重做也是如此。我需要选择刚刚插入的所有行。我使用插入方法尝试了–selectRowIndexes:byExtendingSelection:方法,但第一次调用的插入方法中只有一个选项可以使用。

我在–insertObject:inSoundTracksAtIndex:方法中插入一些对象后,不知道如何进行多项选择。

1 个答案:

答案 0 :(得分:0)

NSTableView为您提供了一个很好的选择行的API:

selectRowIndexes:byExtendingSelection:

您知道哪些行已插入,只需传递它们的索引集(“byExtendingSelection:”参数为“NO”,如果您想创建一个全新的选择)和一切都会很可爱。