0

我正在开发 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:

4

1 回答 1

0

NSTableView 为您提供了一个不错的 API 来选择行:

selectRowIndexes:byExtendingSelection:

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

于 2013-07-26T19:05:44.880 回答